class 中不使用线程的 JavaFX
JavaFX without using a thread in the class
到目前为止,在我见过的所有 JavaFX 示例中,代码都使用某种形式的线程,无论是通过扩展 Application 还是执行以下操作:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
initAndShowGUI(); //arbitrary function
}
});
在主要方法中。我想知道是否有可能避免所有这些并创建一个可以在主 class 中调用的独立 JavaFX class。 (主要 class 确实使用线程)。
例如,我正在尝试绘制一些图块,然后使用 PerspectiveCamera。但是,我希望创建的 projection/view 写在单独的 class 中,然后在主 class 中调用那个 class 的实例。
如果您的代码涉及/初始化 JavaFX 组件,则它必须使用 JavaFX 平台线程。没有办法解决这个问题,JavaFX 需要 才能正常工作(否则你可能 运行 会遇到各种奇怪的线程相关错误。)
Swing 也是这种情况,但在 JavaFX 中,这往往会更彻底地执行,如果您从错误的线程中触及某些内容,则会抛出异常。这是一件 好事 的事情,因为缺乏强制执行可能是大型摇摆不定的项目中的噩梦 - 您可以轻松地花费 天 来追踪错误回到 UI 操作在错误的线程上完成,并且没有抛出警告。
您可以通过一个(实验性的)VM 选项 (-Djavafx.embed.singleThread=true
),它合并了 Swing 和 JavaFX 平台线程,因此您不需要在 UI 线程,如果您同时使用这两个工具包。但是,在生产代码中使用它需要承担风险。
到目前为止,在我见过的所有 JavaFX 示例中,代码都使用某种形式的线程,无论是通过扩展 Application 还是执行以下操作:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
initAndShowGUI(); //arbitrary function
}
});
在主要方法中。我想知道是否有可能避免所有这些并创建一个可以在主 class 中调用的独立 JavaFX class。 (主要 class 确实使用线程)。
例如,我正在尝试绘制一些图块,然后使用 PerspectiveCamera。但是,我希望创建的 projection/view 写在单独的 class 中,然后在主 class 中调用那个 class 的实例。
如果您的代码涉及/初始化 JavaFX 组件,则它必须使用 JavaFX 平台线程。没有办法解决这个问题,JavaFX 需要 才能正常工作(否则你可能 运行 会遇到各种奇怪的线程相关错误。)
Swing 也是这种情况,但在 JavaFX 中,这往往会更彻底地执行,如果您从错误的线程中触及某些内容,则会抛出异常。这是一件 好事 的事情,因为缺乏强制执行可能是大型摇摆不定的项目中的噩梦 - 您可以轻松地花费 天 来追踪错误回到 UI 操作在错误的线程上完成,并且没有抛出警告。
您可以通过一个(实验性的)VM 选项 (-Djavafx.embed.singleThread=true
),它合并了 Swing 和 JavaFX 平台线程,因此您不需要在 UI 线程,如果您同时使用这两个工具包。但是,在生产代码中使用它需要承担风险。