コンソールとGUIで実行可能で更新可能なタスクがあります。期待とGUIが更新されますように私のJavaFX GUI内の進捗状況やメッセージプロパティを接着してコンソールではなくGUIで変更リストが起動される
public static Task<Void> doStuff() {
Task<Void> task;
task = new Task<Void>() {
final int totalSteps = 4;
@Override
public Void call() throws Exception {
updateProgress(0, totalSteps);
updateMessage("1");
action(1);
updateProgress(0, totalSteps);
updateMessage("2");
action(2);
//etc..
return null;
}
};
new Thread(task)
.start();
return task;
}
として書かれた私のタスクを考えてみましょう、すべてが進捗に応じて動作します。私のCLI内 が、私はデバッグに見ることができるような単純なプログレスバーのウィッヒは限り操作の進捗状況
private static void progressBar(Task task) {
task.progressProperty().addListener((new ChangeListener() {
@Override
public void changed(ObservableValue observable, Object oldValue, Object newValue) {
// Return to line beginning
System.out.print("\r");
int percentage = (int) (100 * task.progressProperty().get());
System.out.format("[%3d%%] %s", percentage, task.messageProperty().get());
if (percentage == 100) {
System.out.println("Finished");
}
}
}));
}
}
についてのユーザーの更新を構築しようとした、変更リスナーは、メソッドが取得することはできません変更しましたトリガーされた。何を私は間違って設定しましたか?終わりの完成した印刷物さえも書かれません。
CLIの例をどのように実行しますか? 'Task'クラスはFXスレッドと連携するように設計されているので、FX UIスレッドが存在しないため、JavaFXインフラストラクチャが初期化されていない場合、進行状況の更新やメッセージを出力しない可能性があります。 – Itai
CLIが開始されましたStandart Javaとしてのメインクラススレッド内でProgress Barを呼び出そうとしましたが、これはどちらもうまくいきませんでした。では、JavaFXスレッドとしてCLIを起動する必要がありますか?これは、GUIではない環境でも可能でしょうか? – chenino
可能かどうかは分かりませんが、たとえあったとしてもそれはおそらく望ましくありません。 'Task'はJavaFXと密接に結びついているようで、JavaFXなしで作業するソリューションが必要な場合は、' Task'を使用しないことを検討するべきでしょう。 – Itai