保持少量文本字段在後臺線程中不斷更新的最佳方式是什麼?我記錄了我在DronCoordinator類中保留的quadrotor fly的一些變量。每次他們改變(100毫秒)我想在GUI文本字段中更新它們的值。我已經嘗試從Task類的updateMessage()方法,但這樣我只能繼續更新1文本字段。我需要添加3個或4個更多的變量來保持更新。它工作良好,但只有1個變量才能更新。如何不斷更新JavaFX GUI中的幾個文本字段?
public class ApplicationControler implements Initializable {
@FXML
private Canvas artHorizon;
@FXML
public TextField pitchValue;
@FXML
private TextField rollValue;
@FXML
private TextField yawValue;
@FXML
private TextField thrustValue;
@FXML
private Button start;
private Service<Void> backgroundThread;
@Override
public void initialize(URL location, ResourceBundle resources) {
}
@FXML
private void applicationStart(ActionEvent event) {
backgroundThread = new Service<Void>() {
@Override
protected Task<Void> createTask() {
return new Task<Void>() {
@Override
protected Void call() throws Exception {
//This is the place where class which uptades variables starts
updateMessage(DronCoordinator.pitch);
return null;
}
};
}
};
backgroundThread.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent event) {
pitchValue.textProperty().unbind();
}
});
pitchValue.textProperty().bind(backgroundThread.messageProperty());
backgroundThread.restart();
}
}
如果這適用於「pitchValue」文本字段,那麼對於其他3版本以相同的方式做什麼錯誤?另外,請更具體地說明你想要發生的事情。 – NonlinearFruit
您是否想與GUI進行交互,同時在後臺運行任務?如果這是你想要的,你必須稍後使用Platform.run –
@NonlinearFruit我不能這樣做,因爲backgroundThread.messageProperty()它只是一個字符串,所以當我將同一個messageProperty()與4個文本字段綁定時,所有字段將顯示相同的值。 – PawelW