2014-10-31 58 views
0

如何實現與ProgressBar相關的'updateProgress'相關邏輯以指示覆雜背景任務的滾動性能如下。 這意味着與任務相關的服務方法如此複雜,並且很難逐步詳細地使用該方法並實現'updateProgress'相關邏輯。 如果有人有一些想法,請讓我知道。謝謝。用於複雜背景的JavaFX進度條任務

@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(); 
} 

回答

0

您正在使一切正常,但您錯過了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; 
    } 
}; 

編碼快樂,
Kalasch

+0

Kalaschni嗨。謝謝回覆。問題是我們如何將最大值計算爲20,以及如何將此更新進度欄功能與exportData服務方法結合(同步)。謝謝。 – Channa 2014-12-19 01:21:51

+1

你知道我認爲的最大值(deviceList.size)...順便說一句,你可以通過'list.isEmpty()'檢查列表是否爲空。 – Kalaschni 2014-12-22 08:08:53