実際は私はJavaスレッドの初心者です。私の学習目的のために、私は簡単なプログラムを作成しました。私はどこに行かなかったのか分からない。javafxのスレッドで自動的にラベルが更新されない
コード:
package javaguithread;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
public class Controller {
Thread t1;
@FXML
TextField input;
@FXML
Label output;
@FXML
private void addData() {
output.setText(input.getText());
}
public void initialize() {
t1 = new Thread(() -> {
while (true) {
System.out.println(input.getText());
output.setText(input.getText());
}
});
t1.start();
}
}
それが示すエラーが
at com.sun.javafx.tk.Toolkit.checkFxUserThread(
Toolkit.java:236)
を更新している私は、私が作成した別のクラスでスレッドを初期化しようとしました。彼女は私のコードです。
package javathreadgui;
import javafx.application.Platform;
import javafx.concurrent.Task;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
public class Controller {
private class GuiUpdater extends Task<Void> {
Controller ctrl;
GuiUpdater(Controller ctrl) {
this.ctrl = ctrl;
}
@Override
protected Void call() throws Exception {
makeChanges();
return null;
}
private void makeChanges(){
while(true){
Platform.runLater(() -> {
ctrl.output.setText(ctrl.input.getText());
});
System.out.println("test");
}
}
}
@FXML
TextField input;
@FXML
Label output;
public void initialize() {
System.out.println("Hello ");
Task<Void> task = new GuiUpdater(this);
Thread thread = new Thread(task);
thread.setDaemon(true);
thread.start();
}
}
私は他の
System.out.println("test");
GUIがフリーズとしてコンソール出力を作るとき、それはpreetyうまく動作します。私はそれのために何をすることができますか?
を使用する唯一の誤りのフルエラーログ –
を投稿してください。 –
なぜコントローラーの初期化時に新しいスレッドの下で出力ラベルのテキストを設定するのですか? –