我有一个任务,应该可以在控制台和GUI上运行和更新。考虑我的任务写成Changelistener没有在控制台中触发,但通过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;
}
用我的JavaFX GUI内胶的进展和消息属性,一切正常,并根据进展情况GUI得到更新。 在我的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线程一起工作,所以我猜想如果JavaFX基础结构未初始化,它可能甚至不会发送进度更新和消息,因为将不存在FX UI线程... – Itai
CLI已启动在Standart Java的主类中。我试图在一个线程中调用进度条,但这并不起作用。那么我需要将CLI作为JavaFX线程来调用吗?这甚至可以在不支持GUI的环境中使用吗? – chenino
我不确定这是否可能,但即使它可能也不会令人满意。如果你需要一个没有JavaFX的解决方案,你可能应该考虑不使用'Task',因为'Task'似乎与JavaFX紧密相连。 – Itai