[英]JavaFX Platform.runLater() after site reload
我正在使用嵌入在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不会启动。 我也尝试在AccessController内完成所有工作,但是这也没有工作。
我真的不是没有办法解决这个问题并感谢您的帮助。 提前致谢。
更新
我尝试了更多的事情:
我检查了正在运行的线程。 当我启动Applet-GUI时,有一个JavaFX Application线程和一个QuantumRenderer线程。 当我重新加载网页时,线程将不会再次显示。 在重新加载网页之前,我打开了GUI(并创建线程),但一切正常,但是第二次重新加载失败。
我尝试使用Platform.setImplicitExit(false) 。 使用此选项,我不再需要背景对象。 重新加载网页时,我未捕获QuantumRenderer-0:java.lang.IllegalMonitorStateException ,并且Java控制台关闭。 启动Applet时,在我的计算机上一切正常,但我不想使Java崩溃,并且这种方法在具有相同Java版本的另一台PC上也不起作用(8)。
也许这些信息是有帮助的。
不知道您是否解决了这个问题,但是也许http://news.kynosarges.org/2014/05/01/simulating-platform-runandwait/可以为您提供帮助
runLater吞下了已执行操作可能引发的任何异常,因为它并非旨在将任何内容传达回调用方。 如果要进行错误处理,则需要专门针对提供此类通信的Runnable子类运行runAndWait。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.