【问题标题】:JavaFX progress bar for complex background Task复杂后台任务的JavaFX进度条
【发布时间】:2014-10-31 03:36:20
【问题描述】:

如何实现 ProgressBar 相关的“updateProgress”相关逻辑,以指示复杂后台任务的滚动性能,如下所示。 这意味着与任务相关的服务方法非常复杂,很难使用该方法逐步详细说明并实现“updateProgress”相关逻辑。 如果有人有任何想法,请告诉我。谢谢。

@FXML 
private ProgressBar progressBar;

@Autowired
private DataExportService dataExportService;

private List<Device> deviceList; // User selected device list for export 

/*
 * Export user selected data
 */ 
@FXML 
public void doExport() {

 // Defile the data export concurrent Task
 final Task taskExport = new Task<Void>() {

      @Override protected Void call() throws Exception {

          if(deviceList.size() > 0) {

             try {
                    // How can I implement ProgressBar related 'updateProgress' logic in here ?
                    // Note: It is so hard to implement ProgressBar related indicator on in side the 
                    //       'exportData()' methods because it is too complicated and it had several 
                    //        steps ex: Filter Device related all data, Build a SQL script,
                    //                  Write SQL Script to file etc.  

                    dataExportService.exportData(deviceList);

             } catch (DataExportException e) {
                    logger.error(e.getMessage());
             }

           }

          return null;
      }
 };

 // Set task property to ProgressBar
 progressBar.progressProperty().bind(taskExport.progressProperty());

 // Start data export task
 new Thread(taskExport).start();
} 

【问题讨论】:

    标签: javafx progress-bar task


    【解决方案1】:

    您一切正常,但您错过了updateProgress() 的电话。
    这是一个示例代码:

    Task t = new Task() {
        @Override
        protected Void call() throws Exception {
            int maximum = 20;
            for (int i = 0; i < maximum; i++) {
                // Here you update the progress each time
                updateProgress(i, maximum);
            }
            return null;
        }
    };
    

    快乐编码,
    卡拉什

    【讨论】:

    • 嗨卡拉施尼。谢谢回复。问题是我们如何将最大值计算为 20,以及我们如何将此更新进度条功能与 exportData 服务方法结合(同步)。谢谢。
    • 你已经知道我认为的最大值(deviceList.size)...顺便说一下,你可以通过list.isEmpty()检查列表是否为空。
    猜你喜欢
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 2022-11-12
    • 2018-12-26
    • 1970-01-01
    相关资源
    最近更新 更多