![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Neuer Benutzer Registriert seit: 18.07.2005
Beiträge: 12
| Hallo! Mein Programm verarbeitet eine ca. 8MB-große XML-Datei. Während der Verarbeitung sollten einige Statusmeldungen angezeigt werden (z.B. "Ich habe einen Tag so-und-so gefunden..."). Dafür habe ich eine JEditorPane gebastelt, in welche die entsprechenden Meldungen vom XML-Parser (ich verwende SAX) geschrieben werden. The problem is that... da die Datei ziemlich groß ist, "hängt" meine GUI während der Verarbeitung und die JEditorPane bleibt leer. Erst nachdem alles gelaufen ist, kann ich alle Meldungen sehen. Wie kann ich also eine GUI-Komponente während der Verarbeitungsroutine "wiederbeleben"? :rolleyes: |
| | |
| | Nach oben #5 |
| Chefkoch-Mod Registriert seit: 30.05.2004
Beiträge: 432
|
Hast Du mal ein repaint() versucht?
__________________ Denk mal darüber nach... Lars ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen. www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de |
| | |
| | Nach oben #7 |
| Neuer Benutzer Registriert seit: 18.07.2005
Beiträge: 12
| Sym, repaint() hat leider nix gebracht. Soulfly, Hobbit_im_Blutrausch - hier mein Versuch mit einem extra Thread. Vielleicht hab ich da was falsch gebaut?! :confused: PHP-Code: Vielen Dank für eure Hilfsbereitschaft!!! |
| | |
| | Nach oben #8 |
| Benutzer Registriert seit: 01.07.2005
Beiträge: 37
|
Also vielleicht versteh ich den Code hier falsch oder aber ich hab den Vorschlag mit dem Thread falsch verstanden, aber ich hab das eigentlich so verstanden, dass du das Auslesen des Dokuments in einen Thread packen sollst, und die Meldungen in einen anderen. Oder liege ich da komplett falsch? |
| | |
| | Nach oben #9 |
| Neuer Benutzer Registriert seit: 18.07.2005
Beiträge: 12
| Hot-Thunder, hm... Kann sein, dass ich das falsch verstanden habe. Aber... da die Meldungen vom SAX-Parser kommen, kann ich nur in ihm einen neuen Thread starten, der meine Meldungen anzeigen wird. Oder liege ich da völlig falsch? Was wäre dein Vorschlag? Ich habe mich nämlich nicht so viel mit Threads beschäftigt... |
| | |
| | Nach oben #10 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.161
|
Du solltest den Aufruf des Parsers in einen neuen Thread lagern, d.h. so, dass das Parsen der XML-Datei in einem eigenen Thread stattfindet. Nicht der kleine Krimskrams da von wegen startElement, sondern der Aufruf des Parsers an sich. Dafür musst du dann aber die addMessage so verändern, dass sie im Even-Dispatch-Thread ausgeführt wird. Das geht am einfachsten, in dem du den Code als Runnable realisierst und dann der SwingUtilities.invokeLater() übergibst. Ansonsten müsste dazu aber auch noch was im Java-Tutorial stehen, soweit ich weiß.
__________________ Patrick Gotthardts Weblog. |
| | |
| | Nach oben #11 |
| Neuer Benutzer Registriert seit: 18.07.2005
Beiträge: 12
| TheDragonMaster, vielen Dank, es hat geklappt! War nicht nötig den Parser in einem eigenen Thread zu starten, aber SwingUtilities.invokeLater() - das war das Zauberwort! Hab jetzt allerdings Probleme mit der GUI-Ausgabe. Ich wollte nämlich eine JEditorPane für die Ausgabe benutzen, aber während der Oberflächenaktualisierung kriege ich einen Error und zwar: javax.swing.text.StateInvariantError: infinite loop in formatting Wenn ich aber statt JEditorPane einen einfachen JLabel.setText(myNewMessage) benutze, dann ist die Welt wieder in Ordnung. Der Google meinte, solch ein Fehler kommt nicht selten vor. Ich bin mit ihm konfrontiert, erst wenn ich große Dateien verarbeite. Ist die Datenmenge gering, geht es auch mit JEditorPane unproblematisch. Wenn jemand da eine Idee hat - wäre ich sehr dankbar! Sonst muss ich mich mit JLabel beglücken. Nochmal vielen Dank an alle!!! |
| | |
| | Nach oben #12 |
| Neuer Benutzer Registriert seit: 18.07.2005
Beiträge: 12
|
Ich bin's wieder Leute, ich hab jetzt ein anderes Problem. Das Ganze funktioniert nur, wenn ich nur ein Gui-Objekt (also ein JFrame habe). Ich will aber ein Hauptfenster haben (mit einem "OK"-Button), wobei beim Click auf "OK" ein zweiter Frame geöffnet wird, in den meine Statusmeldungen geschrieben werden. Wenn ich aber auf "OK" klicke, bleibt mein zweite (Output-)Frame leer, bis alles gelaufen ist. Erst danach sehe ich den Output (also dasselbe Problem, das ich gleich am Anfang geschildert habe). Vermeide ich das Hauptfenster und starte meinen Parser direkt (d.h. ohne auf "OK" zu klicken), wird mein Output schon während des Parsens ausgegeben. Genau das ist es, was ich haben will. Warum geht das nicht mit dem "OK"-Button? :confused: Hier bisschen Code zur Veranschaulichung: PHP-Code: |
| | |
| | Nach oben #13 |
| Benutzer Registriert seit: 01.07.2005
Beiträge: 37
|
Also erstmal solltest du einer Klasse das Interface "Runnable" implementieren. In dieser leitest du auch die Methode "run", so wie du es mit den Thread Klassen gemacht hast, ab. Innerhalb der "run" Methode kommt dann der Aufruf für den Code, der abgearbeitet werden soll. In deiner Haupt-Klasse erzeugst du dann nur noch Thread-Objekte, welche auf diese Runnable Schittstelle basieren. Ich würde auch Sicherheitshalber in die Methodensignaturen die brikant sind, das Schlüsselwort "synchronized" voran setzen. Damit sich die einzelnen Threads nicht im speichern durcheinanderkommen. Aber viel mehr habe ich mit Threads auch noch nicht gemacht, deswegen kann ich dir nur raten, dass so zu probieren. |
| | |
| | Nach oben #14 |
| Neuer Benutzer Registriert seit: 18.07.2005
Beiträge: 12
| Das Problem ist (endlich) gelöst! Mit Threads zu arbeiten - war schon richtige Richtung. Hab noch einen Tipp von einem Kollegen bekommen - ein Interface bauen und einen EventListener registrieren. Und das war's! InvokeLater() ist somit gar nicht nötig. Vielen Dank nochmal für eure Hilfsbereitschaft!!! |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| warten auf Threads und Aufbau GUI | desaster | Allgemeine Java-Programmierung | 7 | 07.09.2005 14:55 |
| MVC Architektur, GUI | Java17 | Desktop-Applikationen und Grafik | 3 | 03.03.2005 05:21 |
| GUI Programmierung | Java17 | Literatur | 1 | 28.02.2005 11:10 |
| GUI Programmierung | Java17 | Allgemeine Java-Programmierung | 11 | 17.02.2005 21:04 |
| XML Schema GUI Engine (JAXFront) | spor | Nachrichten | 2 | 05.08.2004 17:27 |