Sofortiges Anzeigen von Text auf einer JTextArea

Status
Nicht offen für weitere Antworten.

djui

Mitglied
Hi!

Ich habe eine Schleife, in der ich mir einen String zusammenbaut, diesen String in eine JTextArea schreibt und dann eine Methode aufruft die etwas ausführt und solange wartet bis die Ergebnisse angekommen sind (kann einige Minuten dauern). Danach schreibe ich weiter Text auf die JTextArea.
Mein Problem ist nun, dass die JTextArea erst NACHDEM der letzte Text auf die TextArea geschrieben wurde, angezeigt wird.

Also sieht der Benutzer die Ausgabe nicht, die VOR der Ausführung der Methode auf die TextArea geschrieben wird.

Wie muss ich da vorgehen, damit der Text geschrieben wird (und sofort angezeigt wird) und trotzdem gewaretet wird, bis das Ergbnis da ist. Muss ich das irgendwie mit Threads machen? Ich hab die nämlich noch nie gecoded.

Habt ihr tipps?

Vielen dank und liebe Grüße
 
B

Beni

Gast
Ja, du musst was mit Threads machen.

Vermutlich führst du deine Berechnungen derzeit im EventDispatcherThread durch. Dieser Thread sorgt dafür, dass etwas gezeichnet wird. Aber solange du in ihm rechnest, kann er nicht zeichnen... (ein Thraed kann nur ein Ding auf einmal machen).

Threads sind relativ einfach: implementier das Runnable-Interface, übergib es einem neuen Thread, und starte den Thread mit "start". Um mit der GUI zu kommunizieren, empfehle ich dir "EventQueue.invokeLater" zu benutzen. Swing ist nicht threadsicher, und wenn du da von einem anderen Thread als dem EDT schreibst, können böse Dinge geschehen (Exceptions, Layoutfehler, ...).
 

djui

Mitglied
Hi!

Erstmals vielen Dank für die tolle und schnelle Hilfe.
Ich hab schon vorher probiert (bevor meinem ersten Eintrag) es mit Threads zu machen, habs aber nicht geschafft (wie gesagt, ich habs noch nie verwendet). Ich hab eine NEUE Klasse gemacht, die Subklasse von Thread ist und dort meinen Code reingeschrieben. Von meinem GUI hab ich diese Klasse dann instanziert, danach threadObject.start() aufgerufen, dann die Methode, die die Berechnung durchführt. Hat aber nicht funktioniert.

Wie hast du das gemeint mit dem Runnable-Interface. Soll ich schon eine eigene Klasse machen, die das Interface implementiert oder? Oder direkt in der GUI-Klasse impl.? Und wie meinst du das mit dem Übergeben an den Thread ("übergib es einem neuen Thread" (-> das Interface)). Wie meinst du das mit dem kommunizieren? Sobald die Methode feritg ist, brauch ich ja nicht kommunizieren oder?

Bitte erklär mir das nochmal, ich schau sowieso schon in der JavaDoc, aber mit etwas Hilfe läufts sicher besser!

Danke nochmal
 

thE_29

Top Contributor
Du hast sagen wir mal ne Methode "rechnen()" die alles rechnet!

Diese rufst du so auf

Code:
new Thread(){
public void run(){
rechnen();
}}.start();
 

djui

Mitglied
ja aber so kann das ja nicht funktionieren oder?

weil der "hauptthread" läuft so ja auch weiter....ich muss den ja irgendwie stoppen oder nicht?

also
1. im "hauptthread" auf die jtextarea schreiben
2. "hauptthread" sleep
3. "rechnenthread" starten
4. wenn "rechnenthread" fertig -> sleep und "hauptthread" wieder aufwecken....

so stell ich mir das vor - hab ich einen denkfehler?

lg
 
B

Beni

Gast
Den Hauptthread darfst du nicht stoppen. Denn wenn du den Hauptthread stoppst, kann nicht gezeichnet werden. Und ist dir nicht möglich zu bestimmen, *wann* gezeichnet wird (wenn du deine Berechnungen z.B. aus deinem "actionPerformed" startest, wird garantiert erst gezeichnet, wenn das actionPerformed fertig ist).
 

djui

Mitglied
Code:
public class Exec extends Thread {
 
       // ....

      public void run() {
          // methode überschrieben
         doCalculate(); // berechnung druchfürhren, die einige minuten dauern kann
      }
}


// ------------------------------------------------------------------------------------------
                Exec exec = new Exec();

		while (it.hasNext()) {		
			r= (MyClass) it.next();

			textarea.append("********* START *********\n");
			textarea.append("ID: " + r.getID() + "\n");

                        exec.start();
			
			
			textarea.append("********* END *********\n");
			
		}


hab das ganze auch schon mit dem interface runnable und der Methode SwingUtilities.invokeLater(exec) ausprobiert. genau so kein erfolg.

ich möchte einfach, dass ********* START ********** und die id schon auf der text area stehen und der bneutzer dies sieht, während die berechnung durchgeführt wird.
nach der berechnung wird dann einfach ******* END ******* dazugeschriben

das darf doch nicht war sein- so ein einfaches problem, und ich schaffs nciht!!!! sch****


im prinzip ist da deine lösung eingebaut...

danke auf jeden fall für die hilfe
 

Leroy42

Top Contributor
Im Prinzip schon richtig, nur dein
Code:
textarea.append("********* END *********\n");
muß als letzte Anweisung der run()-Methode innerhalb des eingeständigen
Threads stehen, ansonsten wird es sofort geschrieben und angezeigt,
da der Aufruft exec.start() sofort beendet wird und nicht auf das Ende der
run-Methode wartet.

Schau dir doch mal ein einfaches Beispiel (animierter Ball in einem Panel)
in einem Tutorial an.
 

djui

Mitglied
ja ok, da hast du recht,

aber der text, der über der .start() methode steht, wird ja schon garnicht angzeigt.
das ist ja das problem.

der komplette text (auch alle gui komponenten wie JTextArea, ein JBUtton und ein JLabel) werden erst nach dem beenden der while-schleife angzeeigt

ideen? dnaek und lg
 

Leroy42

Top Contributor
djui hat gesagt.:
der komplette text (auch alle gui komponenten wie JTextArea, ein JBUtton und ein JLabel) werden erst nach dem beenden der while-schleife angzeeigt

Ja sicher doch. Die while-Schleife ist innerhalb des Event-Dispatch-Threads (EDT).

Auch die while-Schleife selbst, muß in die run-Methode des eigenständigen Threads
damit der EDT überhaupt dazu kommt, die Änderungen in der GUI zu zeichnen.
 

Leroy42

Top Contributor
djui hat gesagt.:
das darf doch nicht war sein- so ein einfaches problem, und ich schaffs nciht!!!! sch****

Die Schwierigkeit liegt darin, daß du den Ablauf von Threads und deren
Zusammenspiel mit dem EDT noch nicht im Blut hast.

Event-driven-programming ist beim ersten Mal für jeden eine Umstellung
und nicht ganz einfach zu verstehen wenn man vorher nur den imperativen
Programmierstil kennt.

Aber wenn du diese Hürde erst einmal genommen hast, wirst du leicht mit Problemen
ganz anderen Kalibers klarkommen. :cool: :D
 

djui

Mitglied
ich habs jetzt hinbekommen.

die schleife selbst gheört in einen eigenen thread.

danke für die hilfe und lg
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
W Kleine Sub-Tabelle in SpreadsheetView-Zelle anzeigen AWT, Swing, JavaFX & SWT 9
J Java GUI Dropdown-Menü anzeigen AWT, Swing, JavaFX & SWT 5
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
M Swing Bilder in Swing anzeigen AWT, Swing, JavaFX & SWT 9
J BufferedImages nacheinander als Video anzeigen AWT, Swing, JavaFX & SWT 14
BananenBrötchen Swing Arraylist in jList anzeigen AWT, Swing, JavaFX & SWT 6
Lukas2904 Swing ID von WLAN Kamera anzeigen lassen. AWT, Swing, JavaFX & SWT 2
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
G AWT AWT Kreise permanent anzeigen AWT, Swing, JavaFX & SWT 3
MiMa File Dateien im ListView als Name anzeigen? AWT, Swing, JavaFX & SWT 6
C Swing In der Titelleiste den Namen und den vollständigen Pfad bzw URL des aktuellen Dokuments anzeigen AWT, Swing, JavaFX & SWT 25
C Swing Aufruf der Funktion (die ein Dialog anzeigt) über Symbol anzeigen lassen AWT, Swing, JavaFX & SWT 4
O Timer in JOptionPane anzeigen AWT, Swing, JavaFX & SWT 2
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
C JavaFX Veränderungen in Scenebuilder in Eclipse als Quellcode anzeigen lassen AWT, Swing, JavaFX & SWT 11
N Textdatei GUI, Text in Textarea anzeigen mehrere Zeilen AWT, Swing, JavaFX & SWT 1
J Warum kann ich die Spaltennummer in der Konsole anzeigen, diese aber nicht speichern ? AWT, Swing, JavaFX & SWT 6
VPChief Icons in 2 Jlabels Director nebeneinander anzeigen AWT, Swing, JavaFX & SWT 26
E Auf JPanel malen und davor JComponenten anzeigen AWT, Swing, JavaFX & SWT 12
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
S Text-Info in der Taskbar anzeigen AWT, Swing, JavaFX & SWT 15
R JavaFX Label oder Imageview anzeigen mit Buttonklick AWT, Swing, JavaFX & SWT 4
B ArrayList, Strings anzeigen AWT, Swing, JavaFX & SWT 1
P Abwächselnd ein Punkt und ein x anzeigen AWT, Swing, JavaFX & SWT 2
A Fenster genau unterhalb von JTextField anzeigen AWT, Swing, JavaFX & SWT 1
N Wie kann ich zwei Grafiken in einer Oberfläche anzeigen lassen? AWT, Swing, JavaFX & SWT 8
T Swing Buffered Image anzeigen AWT, Swing, JavaFX & SWT 45
E Aktuelle Uhrzeit auf jeder Stage anzeigen lassen (JavaFX) AWT, Swing, JavaFX & SWT 2
F JavaFX Aktuelle Zeit in einem TextField anzeigen AWT, Swing, JavaFX & SWT 7
CptK Swing DropdownMenu über Panel-Grenzen hinaus anzeigen AWT, Swing, JavaFX & SWT 1
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
F Countdown in Label anzeigen AWT, Swing, JavaFX & SWT 14
M Loading Screen anzeigen bei Black Screen AWT, Swing, JavaFX & SWT 1
J CheckComboBox : Ausgewählte Items NICHT im Header anzeigen AWT, Swing, JavaFX & SWT 4
ralfb1105 Swing Dynamischer Graph zum anzeigen Perfomance Daten AWT, Swing, JavaFX & SWT 35
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
K Event Handling Über JMenuBar die diversen Panels anzeigen AWT, Swing, JavaFX & SWT 10
G JComboBox: Arrow-Button permanent anzeigen AWT, Swing, JavaFX & SWT 4
L JavaFX Animation, erst zeichnen dann anzeigen AWT, Swing, JavaFX & SWT 4
J CheckComboBox selected Items nicht anzeigen AWT, Swing, JavaFX & SWT 6
L Suchergebnisse variabel mit Button anzeigen lassen AWT, Swing, JavaFX & SWT 3
M JavaFX Ein Labeltext eine zeitlang anzeigen dann weiter machen AWT, Swing, JavaFX & SWT 3
R Swing Verändern der Ausrichtung JButton und neu anzeigen AWT, Swing, JavaFX & SWT 2
J Slider Wert anzeigen AWT, Swing, JavaFX & SWT 15
D MySQL-Tabellen in GUI anzeigen AWT, Swing, JavaFX & SWT 8
Meeresgott AWT JFileChooser bestimmte Ordner anzeigen AWT, Swing, JavaFX & SWT 16
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
M PDF einlesen und innerhalb Pane anzeigen AWT, Swing, JavaFX & SWT 5
S Zwei JTree, ein Model, bei Selection im ersten JTree soll der zweite die Inhlate anzeigen AWT, Swing, JavaFX & SWT 2
M JavaFX StackedBarChart y-Axis soll nur Integerwerte anzeigen AWT, Swing, JavaFX & SWT 1
MiMa PDF in Java FX anzeigen AWT, Swing, JavaFX & SWT 21
T JLabel Textinhalt von Oben anzeigen AWT, Swing, JavaFX & SWT 1
Sugan Java FX Verzeichnisüberwachung -> Bilder auf GUI anzeigen AWT, Swing, JavaFX & SWT 4
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
C Benutzername in GUI eingeben und nach Spiel neues Fenster Benutzername wieder anzeigen AWT, Swing, JavaFX & SWT 1
M Gui-Form alle Labels anzeigen AWT, Swing, JavaFX & SWT 4
J Swing Zeichenfläche im JPanel des Haupfenster anzeigen lassen AWT, Swing, JavaFX & SWT 4
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
beatles Swing JTextField - Game Status aus Array anzeigen AWT, Swing, JavaFX & SWT 3
M Java FX Immer aktuelle Mausposition anzeigen AWT, Swing, JavaFX & SWT 6
J Eigene Klasse auf Basis Textfield in SceneBuilder anzeigen AWT, Swing, JavaFX & SWT 4
L wie Layout-Grid in JXPanel anzeigen? AWT, Swing, JavaFX & SWT 5
JavaMachtMichFertig JavaFX Gui - Löschbutton in Tabelle anzeigen, die mittels MySQL Abfrage gefüllt wird AWT, Swing, JavaFX & SWT 5
stylegangsta JButton Transparent anzeigen AWT, Swing, JavaFX & SWT 9
F JavaFX JavaFX HTMLEditor-Eingabe in Textarea als HTML anzeigen AWT, Swing, JavaFX & SWT 2
V JFreeChart: Tooltip auf Knopfdruck anzeigen AWT, Swing, JavaFX & SWT 2
K Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird AWT, Swing, JavaFX & SWT 3
D Swing Idealgewicht anzeigen per Radiobuttonaktivierung AWT, Swing, JavaFX & SWT 8
J JavaFX Tooltip Verzögerung beim ersten Anzeigen AWT, Swing, JavaFX & SWT 4
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
I JTable: Doppelklick auf Table soll neues Fenster öffnen und Daten aus JTable anzeigen AWT, Swing, JavaFX & SWT 4
B Swing JXMapKit Mausemove in Label anzeigen AWT, Swing, JavaFX & SWT 0
J JavaFX TextArea dynamisch Icon im Background anzeigen AWT, Swing, JavaFX & SWT 2
D Swing Erstes Item einer JCombobox in JTable anzeigen AWT, Swing, JavaFX & SWT 2
V Wie kann ich die Schrift in Java vollkommen anzeigen AWT, Swing, JavaFX & SWT 1
F Menüs in allen Fenstern anzeigen AWT, Swing, JavaFX & SWT 12
J 2D-Grafik Windows Blue-Screen nach anzeigen eines Bildes in Java AWT, Swing, JavaFX & SWT 10
S (Swing)Vollbild anzeigen unter Linux/Mac AWT, Swing, JavaFX & SWT 6
I Swing JLabel Bild für 1sec anzeigen lassen AWT, Swing, JavaFX & SWT 13
M Image aus MS Access anzeigen lassen AWT, Swing, JavaFX & SWT 9
B Swing Dateien im Swing-GUI anzeigen AWT, Swing, JavaFX & SWT 3
llabusch Titelleiste Dokumentenname und Pfad/URL anzeigen AWT, Swing, JavaFX & SWT 2
S Bestimmten Bereich eines Bildes im JFrame mit Scrollpane anzeigen AWT, Swing, JavaFX & SWT 0
G Text im textfeld in einem Editor anzeigen AWT, Swing, JavaFX & SWT 18
I Zwei Fenster nebeneinander anzeigen AWT, Swing, JavaFX & SWT 2
A LayoutManager Statusleiste auch nach Verkleinerung des Fensters anzeigen AWT, Swing, JavaFX & SWT 1
B Swing Bild von Webseite herunterladen, diese dann in JList anzeigen. AWT, Swing, JavaFX & SWT 1
M Nodes in JTree nicht anzeigen AWT, Swing, JavaFX & SWT 0
D 2D-Grafik Bilder anzeigen AWT, Swing, JavaFX & SWT 4
N Swing Alle Objekte anzeigen auch bei JPanel-Überlappung AWT, Swing, JavaFX & SWT 6
K Swing Aktuelle Uhrzeit anzeigen AWT, Swing, JavaFX & SWT 3
U Bild innerhalb hatml code anzeigen AWT, Swing, JavaFX & SWT 5
N JPanel größe wissen/festlegen vor dem Anzeigen AWT, Swing, JavaFX & SWT 3
N Input/Output Stream werte in Label anzeigen. AWT, Swing, JavaFX & SWT 6
T Tetris - nächste Form anzeigen AWT, Swing, JavaFX & SWT 6
B Tabelleneinträge in JList anzeigen AWT, Swing, JavaFX & SWT 5
A Array von JLabel mit Grafiken anzeigen AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben