2022-08-13_javaFX之Task

前言

  • 有一个比较耗时的任务,需要实时展示该任务的进度。
  • 不要想着直接在该任务上更新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{
  @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。

你可能感兴趣的:(2022-08-13_javaFX之Task)