我读过帖子: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。
有帮助吗?提前感谢。
因为等待的时间不确定。
这种等待可能是由锁存器
引起的。如果您发布的代码是在事件调度线程上触发的,则<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 有没有人能告诉我,我做错了什么,因为在互联网上已经很少谈论同样的事情了。