首页 > 解决方案 > JavaFX 不使用类中的线程

问题描述

到目前为止,在我见过的所有 JavaFX 示例中,无论是通过扩展 Application 还是执行以下操作,代码都使用某种形式的线程:

SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            initAndShowGUI(); //arbitrary function
        }
    });

在主要方法中。我想知道是否有可能避免所有这些并创建一个可以在主类中调用的独立 JavaFX 类。(主类确实使用线程)。

例如,我正在尝试绘制一些图块,然后使用 PerspectiveCamera。但是,我希望创建的投影/视图写在一个单独的类中,然后在主类中调用该类的一个实例。

标签: javajavafxgraphicsjava-threads

解决方案


如果您的代码正在接触/初始化 JavaFX 组件,那么它必须使用 JavaFX 平台线程。没有办法解决这个问题, JavaFX需要这样才能正常工作(否则您可能会遇到各种奇怪的线程相关错误。)

Swing 也是如此,尽管在 JavaFX 中,这往往会被更彻底地强制执行,如果您从错误的线程中触摸某些内容,则会引发异常。这是一件好事,因为在大型摇摆项目中,缺乏强制执行可能是一场噩梦——您可以轻松地花费数天时间追踪错误的来源,回到在错误线程上执行 UI 操作的点,并且没有警告被抛出。

您可以通过一个(实验性)VM 选项-Djavafx.embed.singleThread=true(但是,在生产代码中使用此功能需要您承担风险。


推荐阅读