Завершение задачи JavaFX и многопоточность JavaFX
Я только начал изучать JavaFX сегодня и пытался узнать больше о нем, создав клон Snake, но у меня возникли проблемы с многопоточностью. Я хотел создать поток, который обновлял бы положение змеи на экране, но не мог использовать его обычным способом Runnable, потому что я использовал JavaFX из этого потока для обновления позиций прямоугольников, нарисованных на экране (который я узнал Вы не можете это сделать, и вместо этого должны использовать Tasks, Services, Platform.runLater и т. д.?) Мой класс, из которого я создавал поток, расширяет JavaFX.scene.layout.Pane, и я пытаюсь использовать задачу для обновления положения змеи. , Моя проблема в том, что задача, кажется, запускается один или два раза и завершается, без прерываний.
Конструктор для класса, расширяющего Pane (класс Snake расширяет группу):
public GameFrame(){
this.setPrefSize(800, 600);
Snake snake = new Snake();
this.getChildren().add(snake);
taskThread = new Thread(new Task<Void>() {
protected Void call() throws Exception {
while(!Thread.currentThread().isInterrupted()){
snake.updatePosition();
try{
Thread.sleep(1000);
} catch(InterruptedException e){
break;
}
}
return null;
}
});
taskThread.start();
}
Я чувствую, что на самом деле не понимаю, что здесь лучше всего делать, и то, что я пытаюсь сделать, может быть хакерским. Есть ли какие-либо предложения о том, что мне следует делать, или как я могу это исправить?