当前位置: 首页 > 知识库问答 >
问题:

javafx在摆动异常“工具包未初始化”

韶宏邈
2023-03-14

我读过帖子:JavaFx 2. x-Swing:不在FX应用程序线程上

参考“线程“AWT-EventQueue-0”java.lang.IllegalStateException:Toolkit未初始化”

我在这里发现了一个关于JavaFX 2.1:工具箱未初始化的讨论

但我无法使用该解决方案

“Istantiate JFXPanel in Swing Event Dispatcher Thread:”

因为等待的时间不确定。

我在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);
}

其中frame是JInternalFrame,这是JDesktopPane。

有帮助吗?提前感谢。

共有1个答案

方和宜
2023-03-14

因为等待的时间不确定。

这种等待可能是由锁存器引起的。如果您发布的代码是在事件调度线程上触发的,则<code>锁存器。await()调用将阻塞EDT,并确保您发布在EDT上的Runnable永远不会执行,因此将使用锁存器。countDown()语句永远无法到达。您可以使用EventQueue.isDispatchThread方法快速检查这一点。

我强烈建议简单地删除 CountDownLatch,因为在另一个线程上运行该代码不是一种选择,因为您正在使用 Swing 组件,应该访问/修改/创建/...在事件调度线程上。

此外,一旦您卸下闩锁,您将遇到与链接问题中相同的异常。这

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

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

 类似资料:
  • 我的应用程序是基于Swing的。我想介绍JavaFX,并将其配置为在辅助显示器上呈现场景。我可以使用JFrame来保存JFXPanel,JFXPanel可以保存JFXPanel,但我希望使用JavaFX API来实现这一点。 将com.sun.glass.ui.application子类化并使用application.launch(这)不是一个选项,因为调用线程将被阻塞。 编辑:结论 问题:非平凡

  • 问题内容: 我正在尝试使用以下命令在程序的后台播放一个简单的mp3: intro.mp3文件与其他.class文件放在我的包的bin文件夹中。 问题是我的程序终止于: 完整的终止日志为: 根据问题的原因有人有想法吗? 问题答案: 在启动时执行“隐藏”初始化。运行不会触发初始化。 触发它的最简单方法是: 已经执行 具有从fx ant任务打包的jar运行的基础程序(例如,从Netbeans JavaF

  • 我正试着用下面的代码在我的程序背景中制作一个简单的mp3播放器: intro.mp3文件和其他文件一起放在我的包的bin文件夹中。类文件。 问题是我的程序终止于: 完整的终止日志是: 根据问题的原因,有人有任何想法吗?

  • 当我试图启动我的服务器时,我收到了几个错误。我知道这无法启动数据库,但我可以帮助解决以下问题吗? Pentaho用户控制台 检测到以下错误。 一个或多个系统侦听器失败。这些设置在systemListeners中。xml。 ERROR_0014-尝试执行QuartzSystemListener启动序列时出错org.pentaho.platform.scheduler. 有关检测到的每个错误的更多详细

  • 我假设使用以下元素按以下顺序构建一个字节数组: 对称加密的AES密钥(对于AES 128有一个随机密钥,对于AES 128有一个随机初始化向量。在CBC模式下使用AES 128和PKCS5填充进行加密。在加密之前,文本用UTF-8进行编码) AES IV 加密消息(使用ECB模式下的RSA算法和PKCS1填充、先前生成的密钥和消息收件人的公钥) 我正在做的是获取每个参数的长度,以便创建新的byte

  • 我一直在尝试将Quarkus集成到我的多模块分级项目中。我正在导入的项目恰好是这个结构中的一个模块。 使用环境:Gradle6.3、GraalVM-JDK8和IDE-Intellijidea2020。 null 有没有人能告诉我,我做错了什么,因为在互联网上已经很少谈论同样的事情了。