JavaFX 2.1:Toolkit not initialized

转载自  JavaFX 2.1:Toolkit not initialized

一、问题

我的应用程序是基于Swing的。我想介绍JavaFX并将其配置为在辅助显示器上渲染场景。我可以使用JFrame来保存一个可以容纳JFXPanel的JFXPanel,但我想用JavaFX API实现这个目的。

子类化com.sun.glass.ui.Application并使用Application.launch(this)不是一个选项,因为调用线程将被阻止。

从Swing EDT实例化一个Stage时,我得到的错误是:

java.lang.IllegalStateException: Toolkit not initialized

问题:非平凡的Swing GUI应用程序需要运行JavaFX组件。应用程序的启动过程在启动从属服务层后初始化GUI。

解决方案

子类JavaFX Application类并在单独的线程中运行它,例如:

public class JavaFXInitializer extends Application {@Overridepublic void start(Stage stage) throws Exception {// JavaFX should be initializedsomeGlobalVar.setInitialized(true);}
}

旁注:因为Application.launch()方法接受一个Class参数,所以必须使用全局变量来表示已初始化JavaFX环境。

替代方法:在Swing Event Dispatcher Thread中实例化JFXPanel

final CountDownLatch latch = new CountDownLatch(1);
SwingUtilities.invokeLater(new Runnable() {public void run() {new JFXPanel(); // initializes JavaFX environmentlatch.countDown();}
});
latch.await();

通过使用此方法,调用线程将等待直到设置JavaFX环境。

选择您认为合适的解决方案。我选择了第二个,因为它不需要一个全局变量来表示JavaFX环境的初始化,也不会浪费一个线程。

(1)回答1

使用JavaFX的唯一方法是子类化Application或使用JFXPanel,正是因为他们准备了env和toolkit。

阻塞线程可以通过使用来解决new Thread(...)

虽然如果您在与Swing / AWT相同的VM中使用JavaFX,我建议使用JFXPanel,您可以在此处找到更多详细信息:将AWT与JavaFx一起使用是否可以?

 

(2)回答2

找到了解决方案。如果我只是在调用JavaFX Platform.runLater之前从Swing EDT创建一个JFXPanel它就可以了。我不知道这个解决方案有多可靠,如果结果不稳定,我可能会选择JFXPanel和JFrame。

public class BootJavaFX {public static void main(String[] args) {SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {new JFXPanel(); // this will prepare JavaFX toolkit and environmentPlatform.runLater(new Runnable() {@Overridepublic void run() {StageBuilder.create().scene(SceneBuilder.create().width(320).height(240).root(LabelBuilder.create().font(Font.font("Arial", 54)).text("JavaFX").build()).build()).onCloseRequest(new EventHandler() {@Overridepublic void handle(WindowEvent windowEvent) {System.exit(0);}}).build().show();}});}});}
}

 

(3)回答三

我在创建用于测试javaFX tableview更新的unittests时使用了以下命令

public class testingTableView {@BeforeClasspublic static void initToolkit() throws InterruptedException{final CountDownLatch latch = new CountDownLatch(1);SwingUtilities.invokeLater(() -> {new JFXPanel(); // initializes JavaFX environmentlatch.countDown();});if (!latch.await(5L, TimeUnit.SECONDS))throw new ExceptionInInitializerError();}@Testpublic void updateTableView() throws Exception {TableView yourTable = new TableView<>();.... do your testing stuff}}

尽管这篇文章与测试无关,但它帮助我让我的单元测试工作

  • 没有BeforeClass initToolkit,那么在unittest中实例化TableView会产生一个缺少工具包的消息

 

(4)回答4

还可以通过调用以下方式显式初始化工具包: com.sun.javafx.application.PlatformImpl#startup(Runnable)

有点hacky,由于使用* Impl,但是如果你不想使用ApplicationJXFPanel出于某种原因很有用。

从这篇文章重新发布自己

 

(5)回答五

我检查了源代码,这是初始化它

com.sun.javafx.application.PlatformImpl.startup(()->{});

并退出它

com.sun.javafx.application.PlatformImpl.exit();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2018.5.19】模拟赛之二-ssl2433 文件名排序【字符串】

正题 大意 一些文件名&#xff0c;有的有后缀&#xff0c;有的没有。 现在要求&#xff08;先满足前者&#xff09; 1. 没有后缀的排最后 2. 后缀字典序 3. 名字字典序 解题思路 首先按后缀排序如果后缀一样就名字排序&#xff0c;然后两次枚举先搞定有后缀的在搞定没后缀…

layui结合springboot上传图片

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号**【雄雄的小课堂】**。 最近实在是忙的抽不开身&#xff0c;并且身上也出现了一堆的毛病&#xff0c;今天牙疼&#xff0c;明天脊椎疼&#xff0c;然后接着又头疼……年纪轻轻的&#xff0c;咋这么多毛病呢&#xff1f;…

【2018.5.19】模拟赛之三-ssl2434 取数【搜索,卡常或记忆化搜索】

正题 题目大意 有n*m的数字矩阵&#xff0c;要求每次只能往相邻的格子移动并取数&#xff0c;要求取数的顺序是一个等差的上升序列。求最多能移动多少步 解题思路 过法&#xff1a; 爆搜卡常 做法&#xff1a; 记忆化用f[i][j][k]表示在第i行第j列朝方向k移动需要的长度&a…

C#使用Xamarin开发可移植移动应用(1.入门与Xamarin.Forms页面),附源码

前言 什么是Xamarin? Xamarin始创于2011年&#xff0c;旨在使移动开发变得难以置信地迅捷和简单。 Xamarin的产品简化了针对多种平台的应用开发&#xff0c;包括iOS、Android、Windows Phone和Mac App。 Xamarin由许多著名的开源社区开发者创立和参与&#xff0c;而且也是…

Java不需要使用Javafx的Application也能将Node导出图片

一、Java通用导出Javafx Chart图片 Javafx不需要使用Application也能导出图片&#xff0c;使用PlatformImpl.startup方法初始化Javafx的Toolkit。 Javafx API并不是所有机器都支持的&#xff0c;Node导出图片不一定成功。&#xff08;如&#xff1a;无法初始化Javafx的Toolki…

layui上传图片,前端直接拷代码,后端……

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】。最近实在是忙的抽不开身&#xff0c;并且身上也出现了一堆的毛病&#xff0c;今天牙疼&#xff0c;明天脊椎疼&#xff0c;然后接着又头疼……年纪轻轻的&#xff0c;咋这么多毛病呢&#xff1f;我也在…

ASP.NET Core 源码学习之 Options[3]:IOptionsSnapshot

2017-06-28 更新&#xff1a;OptionsSnapshot 已改为 OptionsManager 变更详情IOptionsCache 已改为 IOptionsMonitorCache 变更详情 在 上一章 中&#xff0c;介绍了 IOptions 的使用&#xff0c; 而我们知道&#xff0c;在 ConfigurationBuilder 的 AddJsonFile 中&#xff0…

【2018.5.19】模拟赛之四-ssl2435 航空公司【并查集,二分】

正题 题目大意 有n个点&#xff0c;给出坐标&#xff0c;选择所有距离在k之内的边要求联通所有点&#xff0c;求最小的k。 解题思路 垃圾解法 用二分答案然后加并查集求是否联通。 时间复杂度&#xff1a;O(mlogn)O(mlogn)正解 按距离排序&#xff0c;然后连边到所有岛都联…

javafx爬取网页并且初始化网页数据

一、需求场景 编写爬虫爬取网页的信息&#xff0c;而网页的信息经常是未初始化&#xff0c;没有办法获取网页的数据信息。 网页加载数据有两种类型&#xff1a;第一种是网页请求回来&#xff0c;数据已经加载好了&#xff1b;第二种是网页的数据信息还没有初始化&#xff0c;…

layui结合ajax实现下拉联动效果

大家好好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号&#xff1a;雄雄的小课堂。 昨天分享的是使用layui集合springboot实现图片上传&#xff0c;文章地址在这里&#xff0c;需要的小伙伴们可以去看看&#xff1a; 今天给大家分享的内容也是那天在造项目的时候完成的&am…

ASP.NET Core MVC – Caching Tag Helpers

简介 缓存可以大大提高应用程序加载时间和响应速度。我们可以使用缓存Tag Helpers缓存不会频繁更改的HTML内容。 在上一篇文章ASP.NET Core MVC Tag Helpers 介绍中&#xff0c;我们谈到了Tag Helpers&#xff0c;演示Tag Helpers能做什么、如何使用它们以及一些最常用的Tag …

ssl初一组周六模拟赛【2018.5.19】

前言 先说一下成绩&#xff1a; 姓名成绩xxy260wyc240lrz220lw180hjq140hzb120zyc80xjq去领奖了&#xff08;数独王八吧&#xff09; 正题 题目1&#xff1a;ssl2432 面积最大【数学】 恩…似乎是很简单&#xff0c;可以就是很难&#xff0c;有坑 链接&#xff1a; https…

Javafx的WebEngine的url加载不输出结果坑,gc回收了局部变量

一、坑场景复现 源于w3cschool的JavaFX WebEngine测试例子&#xff0c;运行代码都没有输出&#xff0c;一直在研究为什么会出现这样的结果。 在测试过程中使用WebEngine的html加载&#xff0c;使用WebEngine的url加载&#xff0c;使用WebView加载url&#xff0c;使用仅Scene装…

layui结合ajax实现下拉菜单联动效果

大家好好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号&#xff1a;雄雄的小课堂。昨天分享的是使用layui集合springboot实现图片上传&#xff0c;文章地址在这里&#xff0c;需要的小伙伴们可以去看看&#xff1a;今天给大家分享的内容也是那天在造项目的时候完成的&#x…

ASP.NET Core 源码学习之 Options[4]:IOptionsMonitor

前面我们讲到 IOptions 和 IOptionsSnapshot&#xff0c;他们两个最大的区别便是前者注册的是单例模式&#xff0c;后者注册的是 Scope 模式。而 IOptionsMonitor 则要求配置源必须是可监听的&#xff0c;用来实现 Options 实例的自动更新&#xff0c;并对外提供了 OnChage 事件…

P1967,ssl2267-货车运输【树上倍增LCA,最小生成树变形kruskal】

正题 题目链接&#xff1a; https://www.luogu.org/problemnew/show/P1967 大意 一个无向图&#xff0c;每个边有个权值&#xff0c;若干个询问&#xff0c;求两个点之间的一条最短路是这条最短路上的最小权值最大。 解题思路 首先我们发现其实每两个点之间留一条路径就好了…

易百教程——JavaFX教程

转载自 易百教程——JavaFX教程 JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API&#xff0c;我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序。JavaFX通过硬件加速图形支持现代GPU。 JavaFX允许开发人…

Springboot 2.x 单元测试 JUnit 5

https://www.cnblogs.com/xiaomaomao/p/14307749.html

Layui hint: Table element property lay-data configuration item has a syntax error解决方式

今天在使用layui的数据表格时&#xff0c;报错Layui hint: Table element property lay-data configuration item has a syntax error&#xff0c;找了好几中解决方式&#xff0c;网上说的用{}括起来。 对于我来说都不适应哎&#xff0c;我发现我的问题比较低级。 源代码&…