我正在尝试使用JavaFx在我的GUI中更新WebView。实际上,当我的任务(需要一点)结束时,我想将一个(本地)html文件加载到WebView。我的控制器类在下面。
@FXML
private WebView bubbleChart;
//...
@FXML
private void startAnalysis(ActionEvent event) {
Task<Void> topicAnalysis = new MyTrendAnalysis();
Platform.runLater(topicAnalysis);
//Thread t = new Thread(topicAnalysis);
//t.setDaemon(true);
//t.start();
}
在我的Task类中,有一个方法可以更改WebView的html文件。
private class MyTrendAnalysis extends TrendAnalysis{
// some other stuff
@Override
public void drawResults() {
try {
bubbleChart.getEngine().load(new File("path").toURI().toURL().toString());
} catch (MalformedURLException ex) {
Logger.getLogger(TabPaneController.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
当我使用Platform.runLater();
命令时,我的应用程序无响应,直到任务完成。最后更新webview,就像它应该的那样。
当我尝试 Thread-way (评论中的代码)时,我能够与应用程序进行交互(例如更改标签等),但最终WebView没有更新,我得到了:
java.lang.IllegalStateException:不在FX应用程序线程上; currentThread = Thread-8 at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:238) at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:238) at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:400) 在javafx.scene.web.WebEngine.checkThread(WebEngine.java:931) 在javafx.scene.web.WebEngine.load(WebEngine.java:723) 在prototype.TabPaneController $ MyTrendAnalysis.drawResults(TabPaneController.java:233) 在prototype.TopicAnalysis.TrendAnalysis.call(TrendAnalysis.java:342) 在prototype.TopicAnalysis.TrendAnalysis.call(TrendAnalysis.java:33) 在javafx.concurrent.Task $ TaskCallable.call(Task.java:1259) 在java.util.concurrent.FutureTask.run(FutureTask.java:262) 在java.lang.Thread.run(Thread.java:744)
有什么方法可以获得响应行为并更新我的WebView吗?