fx 线程 弹窗_JFXPanel和FX Platform线程陷阱

fx 线程 弹窗

JFXPanel是一个组件,可将JavaFX内容嵌入到(旧版;-))Swing应用程序中。 基本上,这使合并两个对象变得非常容易,但是要掌握一些陷阱:两个UI工具箱都是单线程的(Swing:EDT + JavaFX:FX平台线程)。 当一起使用时,您必须处理这两个线程,例如javafx.embed.swing.SwingFXUtils.runOnFxThread(Runnable runnable)javafx.embed.swing.SwingFXUtils.runOnEDT(Runnable rrunnable)

FX平台线程是通过initFx()在JFXPanel的构造函数中隐式启动的:

// Initialize FX runtime when the JFXPanel instance is constructed
private synchronized static void initFx() {
    // Note that calling PlatformImpl.startup more than once is OK
    PlatformImpl.startup(new Runnable() {
        @Override public void run() {
            // No need to do anything here
        }
    });
}

但是(如果我理解正确的话),JFXPanel会从Component重写addNotify(),在该组件中将finishListener添加到FX平台( PlatformImpl.addListener(finishListener) )。 最后一个JFXPanel“死亡”时,将调用Platform.exit

这可能会导致一种奇怪的情况:

当使用JFXPanel时(例如与JDialog一起使用):第一个调用打开带有新JFXPanel的Dialog,一切进展顺利。
但是当关闭此对话框时,退出了FX Platform Thread,并且由于某些原因,似乎第二次打开新对话框的调用不会再次启动FX Platform Thread。 因此,JFXPanel上没有任何React!

解:

对我来说,它可以调用(在main()的某个地方早期) Platform.setImplicitExit(false); 以防止隐式关闭FX线程(然后由System.exit()关闭)。

翻译自: https://www.javacodegeeks.com/2015/01/jfxpanel-and-fx-platform-thread-pitfalls.html

fx 线程 弹窗

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值