站点重新加载后的JavaFX Platform.runLater()

时间:2014-04-16 12:32:16

标签: java swing applet javafx

我正在使用嵌入在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中做所有的工作,但这也没有用。

我真的不知道如何解决这个问题并感谢任何帮助。提前谢谢。

更新

我尝试了更多的东西:

  1. 我检查了正在运行的线程。当我启动Applet-GUI时,有一个JavaFX应用程序线程和一个QuantumRenderer线程。当我重新加载网页时,线程将不会再次出现。当我重新加载网页时,我打开了GUI(并创建了线程),一切正常,但是第二次重新加载就失败了。

  2. 我尝试使用 Platform.setImplicitExit(false)。使用此选项,我不再需要我的background-object。重新加载网页时,我得到一个 QuantumRenderer-0 uncaught:java.lang.IllegalMonitorStateException ,Java控制台关闭。启动Applet时,一切都在我的计算机上工作正常,但我不想让Java崩溃,这种方法不适用于具有相同Java版本的不同PC(8)。

  3. 也许这些信息是有用的。

1 个答案:

答案 0 :(得分:0)

不确定你是否解决了这个问题,但也许http://news.kynosarges.org/2014/05/01/simulating-platform-runandwait/可以帮助你

  

runLater吞下执行的操作可能抛出的任何异常,   因为它不是设计用于将任何内容传达给呼叫者。如果   你想要错误处理你需要专门为一个runAndWait   提供此类通信的Runnable子类