JavaFX的摇摆中的异常“工具包未初始化”(javafx in swing exception “

2019-10-17 05:05发布

我读过一篇: 了JavaFx 2.x的-摇摆:未对外汇应用程序线程

参照“异常在线程‘AWT-EventQueue的-0’java.lang.IllegalStateException:工具包未初始化”

我发现这里讨论的JavaFX 2.1:工具包未初始化

但我不能够使用该解决方案

“Istantiate JFXPanel在Swing事件分派线程:”

因为它停留不确定的时间等待。

我使用的JDesktopPane内的JInternalFrame有你同样的问题。

我试过了:

final CountDownLatch latch = new CountDownLatch(1);
SwingUtilities.invokeLater(new Runnable() {
  @Override
  public void run() {
    final JFXPanel javafxPanel = new JFXPanel();
    latch.countDown();       
    BorderPane pane = new BorderPane();
    javafxPanel.setScene( new Scene(pane) {
      Text text = new Text("Hello World");            
    });
    frame.getContentPane().add(javafxPanel, BorderLayout.CENTER);
  }
});        
this.add(frame);
try {
    latch.await();
} catch (InterruptedException ex) {
    System.out.println("err");
    Logger.getLogger(WorkspacePanel.class.getName()).log(Level.SEVERE, null,     ex);
}

当帧是JInternalFrame的,这是一个JDesktopPane中。

任何帮助吗? 提前致谢。

Answer 1:

因为它停留不确定的时间等待。

这种等待可以通过引起latch 。 如果您发布的代码上触发事件指派线程,则latch.await()调用将阻止EDT,并确保了Runnable ,你贴在EDT将永远不会被执行,因此latch.countDown()语句从未达到。 您可以迅速与方法来检查这个EventQueue.isDispatchThread

我强烈建议简单地删除了CountDownLatch ,如运行在另一个代码Thread是不是一种选择,因为你用Swing组件,应该访问/修改/创建工作/ ......在事件指派线程。

此外,一旦你已经删除了锁,你会遇到同样的例外,因为在链接的问题 。 该

javafxPanel.setScene( new Scene(pane) {
  Text text = new Text("Hello World");            
});

必须在JavaFX的线程,而不是在事件调度线程中执行。 见我的回答对如何解决这个问题。



文章来源: javafx in swing exception “Toolkit not initialized”