2017-04-10 7 views
1

ich auf einer JavaFX-Anwendung arbeitete, da habe ich ein Skript, das eine zip, gefolgt von einem anderen Betrieb wie Aktualisieren von Dateien usw.TextArea- wird nicht aktualisiert, während Zip-Extraktion

ich ein Textfeld haben will extrahieren, die anzeigt, was gehen im Hintergrund auf, wie "Zip Extrahieren ...", "Aktualisieren von xyz-Datei" usw.

Bis jetzt habe ich folgende Art und Weise versucht haben:

  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 Klasse

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

    abstract public void updateMessage(String message); 
} 

Ich habe versucht, updateProgress-Methode, Platform.runLater() zu verwenden, aber nichts funktioniert.

Alle Nachrichten, die ich in textArea ausgedruckt habe, werden gedruckt, nachdem alle Operationen ausgeführt wurden.

Bitte helfen.

+2

Sie müssen Ihre 'Task' in einem neuen Thread ausführen, siehe z. https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/concurrency.htm – Itai

+0

@sillyfly Vielen Dank. Löste mein Problem. – chandil03

+0

Dann in Betracht ziehen, Ihre Frage zu löschen ... – GhostCat

Antwort

2

Als javadoc für Task heißt Sie müssen manuell eine Thread erstellen ausführen Ihre Task:

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

Aktuell Ihre task wird auf Anfrage im UI-Thread und blockiert UI-Updates laufen.

Verwandte Themen