向JavaFX线程注入变量
我试图学习JavaFX,但在理解JavaFX线程如何与应用程序的其余部分交互时遇到了一些问题。我使用JavaFX作为界面窗口,但是我在主线程中运行了一些其他东西 我从使用场景生成器创建的文件加载FXML,并将向JavaFX线程注入变量,java,multithreading,javafx,javafx-8,Java,Multithreading,Javafx,Javafx 8,我试图学习JavaFX,但在理解JavaFX线程如何与应用程序的其余部分交互时遇到了一些问题。我使用JavaFX作为界面窗口,但是我在主线程中运行了一些其他东西 我从使用场景生成器创建的文件加载FXML,并将open方法附加到场景生成器中的MenuItem 我曾尝试在编辑器类中使用实例变量,并在构造函数和start方法中填充它,但在open方法中总是null。据我所知,这是因为open方法是从JavaFX线程调用的。解决此问题的最佳做法是什么?另一方面,如果我想访问主线程中的JavaFX线程的组
open
方法附加到场景生成器中的MenuItem
我曾尝试在编辑器类中使用实例变量,并在构造函数和start方法中填充它,但在open
方法中总是null
。据我所知,这是因为open
方法是从JavaFX线程调用的。解决此问题的最佳做法是什么?另一方面,如果我想访问主线程中的JavaFX线程的组件,该怎么办
public class Editor extends Application {
private Stage stage;
private FileChooser fileChooser;
@Override
public void start(Stage stage) throws Exception {
this.stage = stage;
stage.setTitle("Editx");
stage.setScene(new Scene(
FXMLLoader.load(this.getClass().getResource("./Editor.fxml")),
1280,
800));
stage.show();
this.fileChooser = new FileChooser();
this.fileChooser.getExtensionFilters().add(
new FileChooser.ExtensionFilter("OBJ", "*.obj"));
this.fileChooser.getExtensionFilters().add(
new FileChooser.ExtensionFilter("All Files", "*.*"));
}
@FXML
private void open() {
// Both this.fileChooser and this.stage is null here for example
File file = this.fileChooser.showOpenDialog(this.stage);
}
}
这听起来不像是线程问题。让您的
应用程序子类(使用start(…)
方法)也成为您的控制器是不常见的。你能展示生成空指针异常的代码吗?我用一些我尝试过的导致NullPointerException
的东西更新了帖子。我还将尝试分离我的应用程序
子类和我的控制器。我通过分离应用程序
子类和控制器来解决这个特定问题,这允许我实例化一个文件选择器
,并在打开
方法中使用它。但我仍然不知道如何将变量从主线程注入JavaFX线程(最好是注入控制器),反之亦然。我真的不知道“从[a线程]注入变量”是什么意思,除非您只是试图将参数传递给控制器。在这种情况下,这是