在 ScheduledExecutorService 中执行 javascript 函数?

Executing javascript function in ScheduledExecutorService?

我使用每 1 秒运行一次的 ScheduledExecutorService 建立了一个循环。我有一个 WebView (JavaFX),我想从中调用一个函数。

如果我把它放在一个按钮上,我可以很好地调用函数:

button.setOnAction(event -> {
    webEngine.executeScript("someFunction();");
});

然后点击它,它执行得很好,但是当我这样做时:

execService.scheduleAtFixedRate(()->{
    loop();
    webEngine.executeScript("someFunction();");
}, 3000L, 1000L, TimeUnit.MILLISECONDS);

程序在 webEngine.executeScript("someFunction();"); 处停止(如果我将该行放在我的 loop() 方法中,也会执行同样的操作)

如何与程序的其余部分一起每秒执行 someFunction()?为什么暂停?

请试试这个:

timer = new Timer();
        timer.scheduleAtFixedRate(new WebViewProcess(), 3000, 1000);

private class WebViewProcess extends TimerTask {

        @Override
        public void run() {
            Platform.runLater(() -> {
                    webEngine.executeScript("someFunction();");
            });
        }
    }