JavaFX-线程化时属性全为空

时间:2018-11-25 00:05:38

标签: java javafx java-threads

这真的很奇怪。

我有一个在另一个线程中运行launch(args)的类,然后再实例化printer属性:

public void run() {
    printer = new Printer();
    System.out.println("Hi from run");

    Runnable runnable = () -> launch();
    Thread thread = new Thread(runnable);
    thread.start();
}

在我的start方法中,然后我访问printer属性,但是它声明它为空。

@Override
public void start(Stage primaryStage) throws Exception {
    loader = new FXMLLoader(getClass().getResource("sample.fxml"));
    Parent root = loader.load();
    primaryStage.setTitle("Hello World");
    Scene scene = new Scene(root, 300, 275);
    primaryStage.setScene(scene);
    primaryStage.show();

    output = ((Controller) loader.getController()).getTextArea();
    System.out.println("Hi from start");
    printer.setOutput(output);
}

由于在启动线程之前实例化了打印机,所以这不应该是同步问题,因此我仍然进行了一些打印以确保一切按正确的顺序运行。最重要的是,我还打印出了实例的内存地址(使用System.identityHashCode(getClass())),以确保两个线程都访问了相同的数据。

所以现在我很茫然。我知道printer属性不应为null,但是每当我进入printer.setOutput(output);时,都会引发NullPointerException。

0 个答案:

没有答案