JavaFX在FX应用程序线程以外的其他线程中运行WebEngine

JavaFX在FX应用程序线程以外的其他线程中运行WebEngine,java,javafx,javafx-8,javafx-webengine,javafx-webview,Java,Javafx,Javafx 8,Javafx Webengine,Javafx Webview,正如我在标题中所说的,是否可以在FX应用程序线程之外的其他线程中运行 代码: ... WebEngine webEngine = new WebEngine(); Thread thread = new Thread(() -> webEngine.load("https://www.google.com")); thread.setDaemon(true); thread.start(); ... Exception in thread "Thread-6" java.la

正如我在标题中所说的,是否可以在FX应用程序线程之外的其他线程中运行

代码:

...
WebEngine webEngine = new WebEngine();

Thread thread = new Thread(() -> 
    webEngine.load("https://www.google.com"));
thread.setDaemon(true);
thread.start();
...
Exception in thread "Thread-6" java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-6
    at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:279)
    at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:423)
    at javafx.scene.web.WebEngine.checkThread(WebEngine.java:1243)
    at javafx.scene.web.WebEngine.load(WebEngine.java:913)
    at sample.Main.lambda$start$0(Main.java:44)
    at java.lang.Thread.run(Thread.java:748)
例外情况:

...
WebEngine webEngine = new WebEngine();

Thread thread = new Thread(() -> 
    webEngine.load("https://www.google.com"));
thread.setDaemon(true);
thread.start();
...
Exception in thread "Thread-6" java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-6
    at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:279)
    at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:423)
    at javafx.scene.web.WebEngine.checkThread(WebEngine.java:1243)
    at javafx.scene.web.WebEngine.load(WebEngine.java:913)
    at sample.Main.lambda$start$0(Main.java:44)
    at java.lang.Thread.run(Thread.java:748)
关于这个问题,这是不可能的

WebEngine对象必须仅从JavaFX创建和访问 应用程序线程。此规则也适用于任何DOM和JavaScript 从WebEngine对象获取的对象


你自己已经得到了答案。。。看起来是这样吗?无论如何,
WebEngine::load()
是异步的,尽管您必须从JavaFX应用程序线程调用。您想告诉我们为什么要这样做吗?在我的应用程序中,当用户点击某个东西时,应用程序应该将用户重定向到一个网站,并根据用户的输入在浏览器上执行一些JS代码。我想要的是保持WebEngine已经加载到后台,当用户单击时,显示浏览器并执行JS代码。显然,这会快得多。@Mertakoz可以从fx应用程序线程调用它,加载页面,只有当用户单击加载“另一个线程”时才将其添加到场景中,根本解决不了这个问题。加载网页是很慢的,没有魔法可以让它立即加载。唯一的方法是预测加载网页的需要,并在需要之前预先加载。在需要显示之前,始终不能显示
WebView
。是的,如果你做了一个错误的“猜测”,这种方法将消耗你的内存和处理能力