我正在使用嵌入在Swing中的JavaFX编写Java Applet。用户可以使用JFXPanel使用以下代码启动带有JavaFX组件的Swing-GUI:
group = AccessController.doPrivileged(new ProxyNewGroup());
fxPanel = new JFXPanel();
Platform.runLater(new Runnable() {
public void run() {
/* Create some objects and add them to group */
...
Scene scene = new Scene(group);
fxPanel.setScene(scene);
}
};
jFrame.add(fxPanel);
当Applet首先启动时,用户可以创建GUI元素并将其关闭。后来他可以重新创作。为此,我需要在内存中保存一个不可见的JFrame包含JFXPanel整个运行时,我从不使用它,因为我在某处读取了JavaFX-Application-Thread被停止的地方。现在的问题是,当用户重新加载页面时,run-method将不会被执行,并且我不会收到任何错误消息或异常。
我编写了一个自己的类,用自定义构造函数实现runnable。调用构造函数并运行到结束,但run-Method不会启动。我也试过在AccessController中做所有的工作,但这也没有用。
我真的不知道如何解决这个问题并感谢任何帮助。提前谢谢。
更新
我尝试了更多的东西:
我检查了正在运行的线程。当我启动Applet-GUI时,有一个JavaFX应用程序线程和一个QuantumRenderer线程。当我重新加载网页时,线程将不会再次出现。当我重新加载网页时,我打开了GUI(并创建了线程),一切正常,但是第二次重新加载就失败了。
我尝试使用 Platform.setImplicitExit(false)。使用此选项,我不再需要我的background-object。重新加载网页时,我得到一个 QuantumRenderer-0 uncaught:java.lang.IllegalMonitorStateException ,Java控制台关闭。启动Applet时,一切都在我的计算机上工作正常,但我不想让Java崩溃,这种方法不适用于具有相同Java版本的不同PC(8)。
也许这些信息是有用的。
答案 0 :(得分:0)
不确定你是否解决了这个问题,但也许http://news.kynosarges.org/2014/05/01/simulating-platform-runandwait/可以帮助你
runLater吞下执行的操作可能抛出的任何异常, 因为它不是设计用于将任何内容传达给呼叫者。如果 你想要错误处理你需要专门为一个runAndWait 提供此类通信的Runnable子类