2017-04-10 70 views
1

我對JavaFX應用程序更新工作,在那裏,我有一個腳本,提取一個zip其次是一些其他操作如更新文件等文本區域不同時ZIP解壓

我想有一個顯示什麼包含textArea在後臺正在進行,如 「ZIP解壓......」, 「更新XYZ文件」 等

到現在我已經嘗試以下方法:

  MyTask<String> task; 
       task = new MyTask<String>() { 
        @Override 
        protected String call() throws Exception { 

         File path = new File(exportTo.getAbsolutePath()); 
         updateMessage("Extracting modular app to target directory..."); 
         patcher.unZip(appPath.getAbsolutePath(), path.getAbsolutePath()); 

         if (path.exists()) { 
          AppInfo info = getAppInfo(); 
          patcher.patchAndroid(info, resourceZip, new File(path.getAbsolutePath() + "/" + appPath.getName().substring(0, appPath.getName().lastIndexOf("."))), this); 
          showOkAlert("Build completed!"); 
         } else { 
          showOkAlert("Modular app folder not found"); 
         } 
         return ""; 
        } 

        @Override 
        protected void updateProgress(double workDone, double max) { 
         patcher.reportLogs(message); 
        } 

        private String message; 

        @Override 
        public void updateMessage(final String message) { 

         Platform.runLater(() -> patcher.reportLogs(message)); 

         this.message = message; 
         //updateProgress(0, 0); 
        } 
       }; 
       task.run(); 

MyTask類

abstract class MyTask<T> extends Task<T> { 

    abstract public void updateMessage(String message); 
} 

我試過使用updateProgress方法,Platform.runLater()但沒有任何工作。

在完成所有操作後,打印出的所有信息都印在textArea中。

請幫忙。

+2

你需要在新線程上運行你的'Task',參見例如https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/concurrency.htm – Itai

+0

@sillyfly非常感謝。解決了我的問題。 – chandil03

+0

然後考慮刪除你的問題... – GhostCat

回答

2

至於Javadoc文檔Task指出您需要手動創建一個Thread執行您Task

 Thread th = new Thread(task); 
    th.start(); 

目前您的task正在對應用程序UI線程並阻止UI更新運行。