Threads jTextArea Ausgabeproblem

Diskutiere jTextArea Ausgabeproblem im Java Basics - Anfänger-Themen Bereich.
C

caitoo

Hallo,
ich programmiere mit Apache Netbeans unter Windows 10 und habe mir zum Testen ein kleines Programm erstellt. Die GUI besteht lediglich aus einem Button und einer TextArea.
Wenn der Button angeklickt wird, soll ein Verzeichnis rekursiv ausgelesen und die Dateien anschließend in ein anderes Verzeichnis kopiert werden. Das klappt auch alles.
Damit der User sieht, was gerade passiert möchte ich nach jeder kopierten Datei in der TextArea eine Meldung ausgeben, welche Datei gerade kopiert wird.
Das ganze läuft in einer Schleife. Diese durchläuft ein Array welches zuvor mit den Dateinamen gefüllt wurde.
Mein Gedanke war wie folgt:
Java:
[/B] 
for(int i = 0; i < files.length; i++){
    kopiere Datei[i];
    schreibe die Meldung in die TextArea;
}
[B]
- In die Schleife einsteigen und dann die erste Datei kopieren.
- Als nächstes die Ausgabe in der TextArea, welche Datei gerade kopiert wurde
- und dann zur nächsten Datei.
Nach meinem Verständnis sollte das eigentlich kein Problem sein. Das Programm geht aber her und kopiert erst alle Dateien und gibt erst dann die Meldungen aus.
Nach meinen bisherigen Recherchen im Internet ist die GUI beim Kopieren blockiert. Die Quellcodezeile für die Ausgabe in TextArea wird zwar ausgeführt aber in der GUI nicht angezeigt. Erst wenn alle Dateien kopiert sind ist die GUI wieder "frei" und er führt dann nachträglich noch alle Ausgabeanweisungen aus.
Ich habe deshalb die eigentliche Kopieraktion in einen Thread ausgelagert. Das Ganze sieht dann etwa so aus:
Java:
[/B] 
for(int i = 0; i < files.length; i++){
    Thread erstellen
    Thread starten mit .start()
    mit .join() warten bis die erste übergebene Datei im Thread kopiert wurde
    dann die Meldung in die TextArea schreiben;
}
[B]
Leider ändert sich am Verhalten meines Programms überhaupt nichts.
Hat von Euch schon mal jemand eine solche Funktionalität in sein Programm eingebaut und wenn ja, wie wurde es umgesetzt.
Mir würde es schon genügen, wenn ich hier die Codeschnipsel nur für mein Problem bekomme. Ich muss nicht den Code für die ganze Anwendung sehen.
Wäre Euch für Hilfe echt dankbar.

Gruß Ralf
 
L

LimDul

Das Join ist falsch :)

Das in einen eigenen Thread auslagern ist schon richtige Idee. Der Hauptthread läuft dann einfach weiter (ggf. solltest Buttons deaktivieren, auf die man während es Kopiervorgangs nicht drücken soll).

Aber einen Thread, der alle Dateien kopiert. Und der Thread bekommt als Info:
* Die Liste der zu kopierenden Datei
* Die JtextArea wo er den Status protokollieren soll.

Immer wenn Thread dann eine Datei kopiert hat, aktualisiert er mittel SwingUtils.invokeLater die TextArea und ruft repaint auf.
 
C

caitoo

Hallo LimDul, erst mal vielen Dank für den Tipp. Wenn ich Dich richtig verstehe, dann sollte die komplette Schleife in der das Array mit den Dateinamen durchlaufen wird in den Thread ausgelagert werden? Ich werde es testen und berichten ob es funktioniert hat.
 
C

caitoo

Das Join ist falsch :)

Das in einen eigenen Thread auslagern ist schon richtige Idee. Der Hauptthread läuft dann einfach weiter (ggf. solltest Buttons deaktivieren, auf die man während es Kopiervorgangs nicht drücken soll).

Aber einen Thread, der alle Dateien kopiert. Und der Thread bekommt als Info:
* Die Liste der zu kopierenden Datei
* Die JtextArea wo er den Status protokollieren soll.

Immer wenn Thread dann eine Datei kopiert hat, aktualisiert er mittel SwingUtils.invokeLater die TextArea und ruft repaint auf.
Hallo LimDul,
habe Deinen Tipp umgesetzt und siehe da es hat funktioniert. Wie mein Chef immer schon sagte "Kaum richtig gemacht und schon funktioniert es." :)

Vielen Dank nochmal.
 
Thema: 

jTextArea Ausgabeproblem

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben