在ScheduledExecutorService中执行javascript函数?
我已经使用ScheduledExecutorService建立了一个循环,该服务每1秒运行一次。我有一个WebView(JavaFX),我想从中调用一个函数 如果我把它放在如下按钮上,我可以很好地调用函数:在ScheduledExecutorService中执行javascript函数?,javascript,java,javafx,webview,scheduledexecutorservice,Javascript,Java,Javafx,Webview,Scheduledexecutorservice,我已经使用ScheduledExecutorService建立了一个循环,该服务每1秒运行一次。我有一个WebView(JavaFX),我想从中调用一个函数 如果我把它放在如下按钮上,我可以很好地调用函数: button.setOnAction(event -> { webEngine.executeScript("someFunction();"); }); 然后点击它,它就会正常运行,但当我这样做时: execService.scheduleAtFixedRate(()-&g
button.setOnAction(event -> {
webEngine.executeScript("someFunction();");
});
然后点击它,它就会正常运行,但当我这样做时:
execService.scheduleAtFixedRate(()->{
loop();
webEngine.executeScript("someFunction();");
}, 3000L, 1000L, TimeUnit.MILLISECONDS);
程序只在webEngine.executeScript(“someFunction();”)处停止
(如果我将该行放在循环()方法中,也会执行相同的操作)
如何与程序的其余部分一起每秒执行someFunction()
?为什么会暂停?请尝试以下操作:
timer = new Timer();
timer.scheduleAtFixedRate(new WebViewProcess(), 3000, 1000);
private class WebViewProcess extends TimerTask {
@Override
public void run() {
Platform.runLater(() -> {
webEngine.executeScript("someFunction();");
});
}
}
你说的“停下来”是什么意思?冻结/挂起?撞车?如果是这样,堆栈跟踪会说什么?@Mena我仍然可以单击stuff和do stuff,控制台中没有显示任何内容,一切正常,除了scheduleexecutorservice中应该执行的内容不正常,例如,如果我在webEngine.executeScript(“someFunction();”)之后放置System.out.println(“bleh”)
它没有到达它很高兴能帮助您注意到计时器
已被弃用,建议更换ScheduledExecutorService
。这里的解决方案可能是在平台上。runLater
异步调用。@Mena是的,这是我使用并开始工作的部分:)