GUI hängt während Programm läuft

redbomber

Bekanntes Mitglied
Hi zusammen
und schon wieder hab ich ein Problem... :/

Ich habe ein Tool mit einer GUI.
Der Benutzer kann Dateien auswählen, Einstellungen zu diesen Dateien verändern usw.
Wenn er fertig ist drückt er einen Knopf "Start" und dann wird mit diesen Dateien etwas gemacht.

Nun wärs ja ganz nett den Benutzer darüber zu informieren was gerade abläuft...sonst denkt er ja das Programm hat sich aufgehängt, da die Aktionen teilweise etwas länger dauern können.

Also habe ich in der GUI eine Tabelle eingefügt, die über das TableModel über die aktuellen Aktionen informiert wird und diese entspechend in eine Zeile der Tabelle schreibt (z.B. Zeitpunkt | Info | usw.)

Das ganze funktioniert auch, aber erst wenn alle Dateien bearbeitet wurden.
Dann schreibt er alle Infos zu den Aktionen rein, die seltsamerweise alle exakt zur selben Zeit "erstellt" wurden.

Ok, dann dachte ich, ich muss die ganze Aktion in einen extra Thread verpacken.
Also hab ich nun einen Thread, der beim Drücken des Knopfes "Start" die Aktionen mit den Dateien vornimmt...
Geht aber noch immer nicht. Die ganze GUI hängt. Also ich kann z.B. nicht die ScrollPane anklicken oder sonst was.

Die Frage ist nun, woran liegt das? Warum hängt denn alles?
 

eRaaaa

Top Contributor
Ok, dann dachte ich, ich muss die ganze Aktion in einen extra Thread verpacken.
Also hab ich nun einen Thread, der beim Drücken des Knopfes "Start" die Aktionen mit den Dateien vornimmt...
Geht aber noch immer nicht. Die ganze GUI hängt. Also ich kann z.B. nicht die ScrollPane anklicken oder sonst was.

Die Frage ist nun, woran liegt das? Warum hängt denn alles?

Also eig. dürfte das nicht passieren, hast du den Thread auch richtig mit start() gestartet anstelle von run? Das wird oft falsch gemacht. Ansonsten könnte ein bisschen Code sicherlich auch nicht schaden. Und den SwingWorker könntest du dir auch mal anschauen:
Worker Threads and SwingWorker (The Java™ Tutorials > Creating a GUI With JFC/Swing > Concurrency in Swing)
Der kann immer wieder zwischendurch Informationen an den EDT/GUI-Thread übergeben, diese kannst du dann dort threadsicher aktualisieren.
 

henpara

Bekanntes Mitglied
du mußt den SwingWorker benutzen. dann kannst du in der "doinBackground" methode deinen code ausführen und deine gui hängt nicht.

mfg
 

redbomber

Bekanntes Mitglied
Also schon einmal vielen Dank!

1.
Ich habe run() verwendet anstatt start()
Gerade gelesen dass bei run() die Threads nacheinander starten und bei start() alle gleichzeitig.
Eine vom eigentlichem Problem abweichendende Frage:
Wenn ich nur einen Thread habe, wie bei mir, also ein Thread der alle Dateien nacheinander abarbeitet, wärs eigentlich egal ob run() oder start()!?

2.
Ja ich versuche hier mal etwas Code zu posten, Das ganze ist nur etwas groß geworden daher weiss ich nicht wo anfangen, damit der Code euch auch etwas bringt.

3.
Lese mir das eben mit SwingWorker durch. Um ehrlich zu sein habe ich bisher davon noch nie etwas gehört.
 

eRaaaa

Top Contributor
1.
Ich habe run() verwendet anstatt start()
Gerade gelesen dass bei run() die Threads nacheinander starten und bei start() alle gleichzeitig.
Eine vom eigentlichem Problem abweichendende Frage:
Wenn ich nur einen Thread habe, wie bei mir, also ein Thread der alle Dateien nacheinander abarbeitet, wärs eigentlich egal ob run() oder start()!?

Du hast ja nicht nur einen Thread, du hast den GUI-Thread, deinen main-Thread + den selbst erstellten vermutlich. run heißt einfach nur, dass du die Methode direkt aufrufst, so wie jede andere auch(synchron). Mit start wird die Methode nebenläufig zu den anderen ausgeführt, also das was du eig. erreichen möchtest(asynchron)
 

redbomber

Bekanntes Mitglied
Du hast ja nicht nur einen Thread, du hast den GUI-Thread, deinen main-Thread + den selbst erstellten vermutlich. run heißt einfach nur, dass du die Methode direkt aufrufst, so wie jede andere auch(synchron). Mit start wird die Methode nebenläufig zu den anderen ausgeführt, also das was du eig. erreichen möchtest(asynchron)

ok, verstehe ;) danke!
 
G

Gast2

Gast
Und vergess nicht dass du sobald du wieder auf GUI Elemente zugreifen möchstest diese zum GUI Thread synchronisieren solltest siehe SwingUtilities.invokeLater
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Swing Programm hängt sich bei Buttondruck auf? (GUI für "Chatbot" erstellen) AWT, Swing, JavaFX & SWT 15
H Swing BufferedReader.close() hängt im SwingWorker AWT, Swing, JavaFX & SWT 1
D JavaFX Anwendung hängt sich permanent auf AWT, Swing, JavaFX & SWT 6
T Swing Programm hängt sich auf! AWT, Swing, JavaFX & SWT 23
B Frame hängt sich auf trotz invokeLater AWT, Swing, JavaFX & SWT 1
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
J Programm hängt sich bei Log In auf AWT, Swing, JavaFX & SWT 1
C JFileChooser hängt bei Ausführung mit Terminal AWT, Swing, JavaFX & SWT 2
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
F Grafik hängt sich auf AWT, Swing, JavaFX & SWT 20
P GUI hängt AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Desktop.open(file) hängt AWT, Swing, JavaFX & SWT 4
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
C Swing JTextfield hängt sich bei Eingabe auf AWT, Swing, JavaFX & SWT 6
C SWT Gui Thread hängt sich auf AWT, Swing, JavaFX & SWT 3
H Swing UndoManager hängt beim Redo AWT, Swing, JavaFX & SWT 3
D JApplet hängt im Browser fest AWT, Swing, JavaFX & SWT 5
P JTree insertNodeInto hängt das Item in die "Luft" AWT, Swing, JavaFX & SWT 8
E Swing-Gui hängt scheinbar AWT, Swing, JavaFX & SWT 14
J JTextArea#replaceRange() - Wo hängt der Hammer? AWT, Swing, JavaFX & SWT 4
D MessageDialog hängt AWT, Swing, JavaFX & SWT 3
S statusleiste bleibt leer und gui hängt AWT, Swing, JavaFX & SWT 3
B drawImage() hängt! AWT, Swing, JavaFX & SWT 18
G GUI hängt AWT, Swing, JavaFX & SWT 7
M Rechner/JVM hängt ab ca. 247 Frames AWT, Swing, JavaFX & SWT 8
T Java Runtime.exec per JButton auslösen -> Programm hängt AWT, Swing, JavaFX & SWT 10
H JItem während der Programmlaufzeit verändern AWT, Swing, JavaFX & SWT 8
G JavaFX BarChart während der Runtime aktualisieren AWT, Swing, JavaFX & SWT 4
E Swing Layout während der Laufzeit anpassen AWT, Swing, JavaFX & SWT 3
S JavaFX ListView Inhalte während Laufzeit ändern AWT, Swing, JavaFX & SWT 23
I AWT Listener während man in anderem Fenster ist AWT, Swing, JavaFX & SWT 4
M JavaFX Absoluter Fokus während drag Event AWT, Swing, JavaFX & SWT 10
G JavaFX - Während AudioRecording keine Text eingabe TextField möglich AWT, Swing, JavaFX & SWT 6
T JProgressbar während actionListener updaten AWT, Swing, JavaFX & SWT 1
T Timer und GIF Animationen pausieren während Maus sich bewegt AWT, Swing, JavaFX & SWT 4
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
U Java FX Zusätzliches Label per Knopfdruck während der Laufzeit auf Panel einfügen. AWT, Swing, JavaFX & SWT 2
F JavaFX Timeline Animation soll X- und Y-Position während Animation ändern AWT, Swing, JavaFX & SWT 2
B 3D-Grafik Java 3D Licht während Laufzeit ändern AWT, Swing, JavaFX & SWT 0
Joew0815 Dropdown meue während der Laufzeit ändern. AWT, Swing, JavaFX & SWT 6
D Swing Jlist Größe während der Laufzeit verändern. AWT, Swing, JavaFX & SWT 11
J JLabel während einer methode aktualisieren AWT, Swing, JavaFX & SWT 6
H jprogressbar während datenabfrage anzeigen AWT, Swing, JavaFX & SWT 5
B ProgressBar während Berechnung AWT, Swing, JavaFX & SWT 4
M Swing JList Item in andere JList während Ausführung AWT, Swing, JavaFX & SWT 4
M JLabel aktualsisieren während Verarbeitung AWT, Swing, JavaFX & SWT 12
E Buttons während einer Berechnung deaktivieren AWT, Swing, JavaFX & SWT 6
D JTable Mausevents, während editiert wird AWT, Swing, JavaFX & SWT 5
T Swing JFrame blockieren während anderes JFrame offen ist AWT, Swing, JavaFX & SWT 2
R Wie Vorgehen bei fundamentaler Veränderung des Layouts während des Programmablaufs? AWT, Swing, JavaFX & SWT 19
S Programm pausieren während JDialog offen ist AWT, Swing, JavaFX & SWT 2
X Tabelle während Funktionsaufruf aktualisieren AWT, Swing, JavaFX & SWT 11
S Swing JTextArea während der Laufzeit füllen AWT, Swing, JavaFX & SWT 5
J Lazy Loading eine JTree während Scrollen AWT, Swing, JavaFX & SWT 11
P repaint während Thread läuft AWT, Swing, JavaFX & SWT 9
S Swing Während Frame verschoben wird... AWT, Swing, JavaFX & SWT 2
C keine weiteren Events während Drag&Drop Operation möglich? AWT, Swing, JavaFX & SWT 5
T Swing Dialoginhalt automatisch anpassen während Größenänderung AWT, Swing, JavaFX & SWT 2
D Swing Anzeige während eines Ladevorganges AWT, Swing, JavaFX & SWT 6
O Swing es können keine neuen Labels hinzufügt werden während der Timer läuft AWT, Swing, JavaFX & SWT 14
S Java3D: Alle Objekte in BranchGroup löschen während Laufzeit AWT, Swing, JavaFX & SWT 3
D JTable während edit kein update machen lassen AWT, Swing, JavaFX & SWT 2
M SWT Mutter-Shell blocken während Tochter-Shell noch offen ist AWT, Swing, JavaFX & SWT 6
S Swing DnD: Image während Drag-Operation ändern AWT, Swing, JavaFX & SWT 3
M Swing JTable während Laufzeit beschreiben AWT, Swing, JavaFX & SWT 14
S Objekt wird während Endlosschleife nur einmal bewegt AWT, Swing, JavaFX & SWT 2
O Zeichnene auf ein Jpanel während der Laufzeit des Programms AWT, Swing, JavaFX & SWT 2
J GUI (JTable) während Rekursion aktualisieren AWT, Swing, JavaFX & SWT 4
M Erzeugen von Komponenten während der Laufzeit AWT, Swing, JavaFX & SWT 6
S Methode während ihrer Laufzeit abbrechen AWT, Swing, JavaFX & SWT 6
P GUI-Updaten während eines externen Prozesses AWT, Swing, JavaFX & SWT 2
C jComboBox während eingabe kontextabhängig vorausfüllen AWT, Swing, JavaFX & SWT 3
DeeDee0815 LookAndFeel während der Laufzeit verstellen AWT, Swing, JavaFX & SWT 4
G Wie Fenstergröße während Fenstergrößenänderung auslesen? AWT, Swing, JavaFX & SWT 2
F Aktualisierung während MOUSE_PRESSED AWT, Swing, JavaFX & SWT 4
D Widget/Control während Laufzeit durch ein anderes ersetzen AWT, Swing, JavaFX & SWT 3
E JTable-während der Einfügezeit der Zellen in die Table AWT, Swing, JavaFX & SWT 2
B JButton während der Laufzeit in JLabel umwandeln AWT, Swing, JavaFX & SWT 3
P JTextArea veränder Größe während Laufzeit; GridBagLayout AWT, Swing, JavaFX & SWT 8
Redfrettchen JTextArea während einer DocumentListener Notification ändern AWT, Swing, JavaFX & SWT 5
D JComponets während der Laufzeit in ein Panel einfügen AWT, Swing, JavaFX & SWT 2
Y Aktion während gedrückter Taste AWT, Swing, JavaFX & SWT 2
K Syntaxhighlight während der Texteingabe AWT, Swing, JavaFX & SWT 11
B Kein Repaint während eines Prozesses. AWT, Swing, JavaFX & SWT 5
D JTable Header während Laufzeit ändern. AWT, Swing, JavaFX & SWT 3
L JTable - Button Speichern während des Editieren AWT, Swing, JavaFX & SWT 3
S LaF - switcht erst während des Runs auf System.LaF AWT, Swing, JavaFX & SWT 2
M während der Roboter arbeitet sollte man sich raushalten. AWT, Swing, JavaFX & SWT 6
m@nu Dialog während warten anzeigen AWT, Swing, JavaFX & SWT 3
M GUI Update während der Verarbeitung einer Methode AWT, Swing, JavaFX & SWT 3
G Textfeldgröße während Eingabe ändern AWT, Swing, JavaFX & SWT 4
M In einem JFrame Menüs & . während der Laufzeit verändern AWT, Swing, JavaFX & SWT 6
L Constraints während der Laufzeit verändern AWT, Swing, JavaFX & SWT 7
D JTable Spalten mit Namen während der Programmlaufzeit hinzuf AWT, Swing, JavaFX & SWT 5
Juelin starten maven javafx programm ohne netbeans AWT, Swing, JavaFX & SWT 29
P AWT Programm funktioniert nicht richtig AWT, Swing, JavaFX & SWT 35
G CAD Programm AWT, Swing, JavaFX & SWT 4
thor_norsk E - Mail Programm AWT, Swing, JavaFX & SWT 2
_user_q Über installDist exportiertes Programm wirft "Unsupported JavaFX configuration" AWT, Swing, JavaFX & SWT 0
CodingBerlin JavaFX Programm läuft nur unter Eclipse AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben