向JavaFX线程注入变量

向JavaFX线程注入变量,java,multithreading,javafx,javafx-8,Java,Multithreading,Javafx,Javafx 8,我试图学习JavaFX,但在理解JavaFX线程如何与应用程序的其余部分交互时遇到了一些问题。我使用JavaFX作为界面窗口,但是我在主线程中运行了一些其他东西 我从使用场景生成器创建的文件加载FXML,并将open方法附加到场景生成器中的MenuItem 我曾尝试在编辑器类中使用实例变量,并在构造函数和start方法中填充它,但在open方法中总是null。据我所知,这是因为open方法是从JavaFX线程调用的。解决此问题的最佳做法是什么?另一方面,如果我想访问主线程中的JavaFX线程的组

我试图学习JavaFX,但在理解JavaFX线程如何与应用程序的其余部分交互时遇到了一些问题。我使用JavaFX作为界面窗口,但是我在主线程中运行了一些其他东西

我从使用场景生成器创建的文件加载FXML,并将
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线程]注入变量”是什么意思,除非您只是试图将参数传递给控制器。在这种情况下,这是