前言
- 有一个比较耗时的任务,需要实时展示该任务的进度。
- 不要想着直接在该任务上更新UI。。。会出现UI假死,UI更新不成功。哪怕用了bind也是如此。
- 目前,我发现的解决办法是用Task。把耗时的任务做成Task。个人感觉相对来说复杂了蛮多,还需要修改任务步骤,增加进度提示。
1.主线程开始Task进程
- 注意其中的dleFilestask.progressProperty()用来更新UI
DelFilesTask delFilesTask = new DelFilesTask();
Thread thread = new Thread(delFilesTask);
delFilesTask.progressProperty().addListener((observable, oldValue, newValue) -> progressAlert.setContentText(("删除进度:" + newValue)));
thread.start();
2.Task对象的设计
public class DelFilesTask extends Task<Long>{
@Override
protected void updateValue(Long value) {}
@Override
protected Long call() throws Exception {}
@Override
updateProgress(long workDone, long max)
@Override
updateMessage(String message)
@Override
updateTitle(String title)
}
- 其中call()方法为任务的主步骤,需要在这里调用updateMessage(String message)等方法。用来反馈任务步骤。主线程就可以用对应的属性来更新ui
- updateValue为call()方法完成后调用。传入的value为call()方法的返回值。
- updateProgress(long workDone, long max)必须传入workDone和max。
网友评论