1

私がやろうとしているのは、ボタンをクリックした後でもリアルタイムでテキストエリアにテキストを印刷することです。

ボタンをクリックすると、ジョブが完了するまで UI がフリーズし、その後、System.out.println とは異なり、すべてのテキストが一緒に印刷されます。

以下のコードは私が試したもので、期待どおりに動作しません。UI がハングアップし、テキストエリアに「テスト」が表示されません。

リスナーを使用する必要はなく、appendText のみを使用しても問題ありませんが、UI をフリーズせずにボタンの ActionEvent を機能させる方法がわかりません。

私は本当にあなたの助けやより良いコードに感謝します!!

final TextField announcement = new TextField();
    Platform.runLater(new Runnable() {
        @Override public void run() {
            announcement.textProperty().addListener(new javafx.beans.value.ChangeListener<String>() {
                        public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
                        textoutput.appendText(announcement.getText());
                        }
            });
        }
    });

btn.setOnAction(new EventHandler<ActionEvent>() {
    @Override
        public void handle(ActionEvent event) { 
             announcement.setText("test");
             // bunch of codes below
        }
});
4

2 に答える 2

0

これは、イベント ハンドラーが FX スレッドで実行されているため、終了するまで UI を更新できないためです。ItachiUchiha で既に提案されているように、コードをTask内に配置する必要があります。TextArea 内のテキストを更新する必要がある場合は、タスクの updateMessage()メソッドを使用します。Tasks メッセージ プロパティに ChangeListener を配置し、そのリスナー内からテキストを設定します。

于 2015-02-07T17:30:24.813 に答える