Прямо сейчас у меня есть решение - иметь очередь, и когда что-то проходит через сокет, ставит его в очередь, а затем вызывает stage.hide () или stage.show (), в зависимости от того, что это такое.Но у меня возникли проблемы с реализацией.У меня есть что-то вроде этого:
private BlockingQueue<String> requests;
private Stage primaryStage;
public GraficInterface() {
requests = new LinkedBlockingQueue<String>();
}
@Override
public void start(Stage sp) {
try {
this.primaryStage = sp;
Parent root = FXMLLoader.load(getClass().getResource(...));
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.sizeToScene();
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
Thread stopper = new Thread(new Runnable() {
public void run() {
String message;
while (true) {
try {
message = requests.take();
if (message.equalsIgnoreCase("show")) {
primaryStage.show();
} else if (message.equalsIgnoreCase("hide")) {
primaryStage.hide();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
stopper.start();
launch();
}
public void addToGraficThread(String string) {
try {
this.requests.put(string);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
В очереди все работает нормально, но я получаю java.lang.NullPointerException
, когда я primaryStage.show()
или primaryStage.hide()
Что япытаясь сделать это возможно?Есть ли другой способ?