Я делаю простую игру с игрой с JavaFX, и мне нужен поток для запуска, чтобы я мог проверить, жив или нет противник или игрок. Моя проблема не начинается и не использует поток, но останавливается, когда окно закрывается.Запуск темы в JavaFX
Я сделал образец класса, чтобы продемонстрировать, что я имею в виду.
private Thread thread;
private boolean running;
private Stage window;
public void run() {
while (running) {
System.out.println("Hello");
}
stopThread();
}
public synchronized void startThread() {
running = true;
thread = new Thread(this, "Monitor");
thread.start();
}
public synchronized void stopThread() {
running = false;
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void start(Stage stage) throws Exception {
window = new Stage();
window = stage;
Pane layout = new Pane();
Scene scene = new Scene(layout);
window.setOnCloseRequest(e -> {
e.consume();
close();
});
window.setScene(scene);
window.show();
}
public void close() {
window.close();
stopThread();
}
public static void main(String[] args) {
Things things = new Things();
things.startThread();
launch(args);
}
Когда я запускаю его, «Hello» печатает непрерывно, но когда я пытаюсь закрыть его, поток продолжает работать и eclispe переходит в режим отладки, говоря:
Thread [JavaFX Application Thread] (Suspended (exception NullPointerException)) QuantumToolkit.runWithoutRenderLock(Supplier<T>) line: not available GlassWindowEventHandler.handleWindowEvent(Window, long, int) line: not available WinWindow(Window).handleWindowEvent(long, int) line: not available WinWindow(Window).notifyClose() line: not available WinApplication._runLoop(Runnable) line: not available [native method] WinApplication.lambda$null$145(Runnable) line: not available 2091156596.run() line: not available Thread.run() line: not available
Я смотрел вокруг моего кода и не может найти ничего, что является нулевым.
Вы выходящим из приложения при закрытии окна, или есть другие окна, показывающие? –