2016-06-03 12 views
0

Ich bin eine SWT-Anwendung erstellen, die einen lang laufenden Shell-Prozess auslösen würde. Ich bin in der Lage, es in einem separaten Thread als mentione in diesem Java Lobby Link auszulösen.Erfassung von aktiven Protokoll und Anzeige im Textbereich - SWT

Mein Shell-Prozess wird eine Protokolldatei generieren. Ich muss es lesen und den Fortschritt des Prozesses in einem Textbereich anzeigen. Wie man es erreicht, ohne den UI-Thread zu blockieren.

+1

Verwenden etwas ähnliches wie http://stackoverflow.com/a/37594490/2670892 –

+0

Dank greg-449, bin ich etwas verwirrt, wie die Datei rekursiv zu lesen. Wie benutze ich die Alarmfunktion um mein Textarea zu aktualisieren? Lassen Sie mich versuchen, es zu implementieren und zu Ihnen mit frischen Fragen zurückzukehren. – Subramanian

Antwort

0

Wie der Link das erste, was geteilt Sie müssen log Beobachter in einem separaten Thread starten:

Thread one = new Thread(){ 
       public void run() { 
        System.out.println("start watching log."); 
        updateLog(); 
       } 
      }; 

one.start(); 

Nachdem Sie können WatchService verwenden, um die Protokolldateien Änderungen dann Verwenden SWT Display-asyncExec zu erkennen, das Protokoll anzuzeigen Änderungen:

WatchService watchService = FileSystems.getDefault().newWatchService(); 

path.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY); 

WatchKey key; 
while ((key = watchService.take()) != null) { 
    for (WatchEvent<?> event : key.pollEvents()) { 
     System.out.println("Event kind:" + event.kind() + ". File affected: " + event.context() + "."); 
     if (event.context().toString().endsWith(logfileName)) { 

      shlLogViewer.getDisplay().asyncExec(new Runnable() { 
       public void run() { 
        logDisplay.setText(readFromFile(LOG_FILE_SIZE)); 
       } 
      }); 
     } 
    } 
    key.reset(); 
    Thread.sleep(1000); 
}