这真的很奇怪。
我有一个在另一个线程中运行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。