Thread ist nicht nebenläufig

Status
Nicht offen für weitere Antworten.

PrinzMartin

Aktives Mitglied
Moin Moin

erst mal zum Problem:

ich habe eine Klasse welche eine Gui erzeugt, wenn ich dort auf nen button klicke, wird ein Objekt einer anderen Klasse erstellt. Im Konstruktor der Klasse wird per funktion ein TrayIcon erstellt und nachher ein Thread gestartet. Wenn ich direkt hinter dem Thread oder direkt hinter dem erstellen des Objektes (durch den Button) eine Ausgabe mache, erscheint die auch, trotzdem wird die Gui nicht aktuallisiert und auch das Popup Menü vom Tray Icon lässt sich nicht öffnen.

der Threadabschnitt sieht so aus:

Java:
        Runnable runner = new Runnable()
        {
          public void run()
          {
            try
            {
              while(true)
              {
                Thread.sleep(15000);
                System.out.println("hallo welt ich bin der check thread");
                check_mail();
              }

            } catch (Exception e)
            {
              System.out.println(e);
            }

          }
        };
        
        EventQueue.invokeLater(runner);

wobei ich sagen muss, dass ich so noch nie mit Threads gearbeitet habe sondern sons die Threads in einer eigenen Klasse hatte. Nur ist es halt so ers mal einfacher, da das Projekt nicht all zu riesig wird (übersicht is also gegeben) und sons müsste ich ja irgendwie aus der Threadklasse raus die Funktion der aufrufenden klasse aufrufen das würde irgendwie komplex werden mit den parametern (zumindest fällt mir auf die schnelle nix ein).

Und irgendwie läuft es ja auch parallel. Ausgaben die danach kommen werden ja noch angezeigt nur wird die Gui irgendwie gesperrt und das tray icon lässt sich nicht anklicken.

ich hoffe ihr wisst hilfe :)
Grüße
Martin
 

Arbon

Bekanntes Mitglied
Du startest deinen Thread auf dem sogenannten Event Dispatch Thread. Auf diesem werden alle GUI-Operationen ausgeführt, d.h. dadurch das dieser durch deinen eigenen Thread blockiert wird (dein Thread endet ja durch das while(true) nicht und wird daher ständig ausgeführt), reagiert die GUI nicht mehr.

In diesem Fall erstellst du einen neuen Thread, welcher dann wirklich parallel zum Event Dispatch Thread läuft.

Thread t = new Thread(runner);
t.start();
 

PrinzMartin

Aktives Mitglied
ahhhh gut dann ist mir auch klar was das besondere an dem Aufruf war. Die Frage ist jetzt, warum derjenige das in seinem Beispiel so gemacht hat. ich mein nen Thread macht man doch, damit er nichts blockiert... oder seh ich das falsch?

jetz geht es auf jeden fall. Danke sehr
 

Arbon

Bekanntes Mitglied
Also auf dem Event Dispatch Thread Sachen auszuführen kann durchaus erwünscht sein, allerdings führt man normal nur Operationen aus welche die GUI ändern und dabei nicht lange dauern, da ansonsten eben wie du gesehen hast die GUI blockiert wird. Grundsätzlich gilt, dass die GUI nur über den EDT verändert werden sollte. Zugegeben, wenn man es nicht tut funktioniert es meistens trotzdem, allerdings kann es in einigen Fällen doch für Probleme sorgen, besonders bei Multithreading, da Swing nicht Thread-Safe ist.
Hier steht mehr darüber:
Lesson: Concurrency in Swing (The Java™ Tutorials > Creating a GUI With JFC/Swing)
Für längere Operationen, welche aber immer wieder z.B. eine Progressbar oder ähnliches aktualisieren gibt es eine eigene Klasse, den SwingWorker.
 
Zuletzt bearbeitet:

Der Müde Joe

Top Contributor
Das Problem liegt darin, dass das ganze GUI im EDT läuft. Werden nun lange Berechnungen, zB alle Files in einem Ordner suchen darin gemacht, so kann der Thread der das GUI aktualisiert, in diesem Fall der EDT, nicht mehr das GUI aktualisieren. Er rechnet ja was anderes. In deinem Fall ist dies eine Endlosschleife. Sie wird nie mehr aufhören, das GUI ist geblockt. Dafür werden normalerweise zB der SwingWorker benutzt. Startes du einen neuen Thread, welcher unabhängig von EDT läuft, kann der EDT das GUI aktuell halten, währen der 2 die lange Berechnung macht. Wie gesagt, SwingWorker.
siehe auch hier:
Lesson: Concurrency in Swing (The Java™ Tutorials > Creating a GUI With JFC/Swing)

EDIT:
doppelt hält besser ;-)

EDIT2:
da gabs mal eine wunderschöne Präsentation über SwingWorker und foxtrot.
Tut die nur bei mir nicht?
Professional Swing: Creating Polished Apps
Professional Swing: Threading
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
S Datei wird nicht gefunden Thread.currentThread().getContextClassLoader().getResourceAsStream() Allgemeine Java-Themen 1
mrbig2017 Sleep wird ignoriert und der Thread wartet nicht Allgemeine Java-Themen 1
G Thread nicht von GC zerstört Allgemeine Java-Themen 6
J Wie erschaffe ich einen sicheren Datenaustausch zwischen Thread und Nicht-Threads Allgemeine Java-Themen 8
Q Thread wacht nicht auf Allgemeine Java-Themen 7
G Thread erzeugt nicht plausible NullPointerException Allgemeine Java-Themen 7
P [Thread] Scheint nicht Sequenziell zu Arbeiten Allgemeine Java-Themen 9
R Thread läuft nicht?! Allgemeine Java-Themen 7
K Threads Thread aktualisiert Progressbar nicht Allgemeine Java-Themen 4
K event dispatch thread fehler. Compiler meckert nicht aber der Interpreter? Warum?? Allgemeine Java-Themen 11
L Thread stoppen über Button funktioniert nicht Allgemeine Java-Themen 7
D Shell-Prozess lässt Thread nicht enden Allgemeine Java-Themen 4
A java logging api scheint nicht thread save zu sein Allgemeine Java-Themen 22
G Thread- save versus Nicht- Thread- save Allgemeine Java-Themen 2
G Thread lässt sich mit interrupt() nicht unterbrechen Allgemeine Java-Themen 6
K Thread beendet nicht Allgemeine Java-Themen 3
R Thread funktioniert nicht richtig Allgemeine Java-Themen 8
G Thread wird nicht beendet Allgemeine Java-Themen 5
G Thread wait() auf Nicht-Thread Klasse Allgemeine Java-Themen 5
C Warum wartet mein thread nicht? Allgemeine Java-Themen 2
sambalmueslie Thread startet nicht :-( Allgemeine Java-Themen 2
C Thread zu langsam ==> kann doch nicht sein oder? Allgemeine Java-Themen 9
H Thread während Rechenoperation wirkt nicht Allgemeine Java-Themen 2
B Ressourcenleck durch (virtuellen/echten) Thread Allgemeine Java-Themen 11
B Generator mit virtuellem Thread Allgemeine Java-Themen 62
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
smarterToby Wie stoppe ich diesen Thread Allgemeine Java-Themen 4
A Thread.sleep Problem Allgemeine Java-Themen 2
J Thread started nur einmal Allgemeine Java-Themen 19
OnDemand Logfile pro User / Thread Allgemeine Java-Themen 7
OnDemand Thread / Service abbrechen Allgemeine Java-Themen 3
Thallius Ist meine static Helper Class Thread save? Allgemeine Java-Themen 9
P Swing Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: npoints > xpoints.length || npoints > ypoints.length Allgemeine Java-Themen 5
B Thread.sleep() in EJB Container wie lösen? Allgemeine Java-Themen 11
S Ist das Neuzuweisen von Feldern atomic und damit Thread-Safe? Allgemeine Java-Themen 2
S Exception in thread "main" java.lang.NullPointerException at FamilienApp.main(FamilienApp.java:15) Allgemeine Java-Themen 1
J Einen Thread in einer Schleife Allgemeine Java-Themen 2
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
Flynn Thread-Problem... Allgemeine Java-Themen 2
G Thread-Programmierung Allgemeine Java-Themen 5
G Beendet sich der Thread selbst?! Allgemeine Java-Themen 3
S Thread beenden Allgemeine Java-Themen 9
M Array aus Thread Objekten erstellen Allgemeine Java-Themen 2
Aruetiise Swing JOptionPane ohne denn Thread zu pausieren Allgemeine Java-Themen 1
M Nanosekunden-Pause innerhalb einen Thread-Loops Allgemeine Java-Themen 3
E Thread Exception Allgemeine Java-Themen 6
javaerd Binomialkoeffizient ausrechnen, Exception in thread "main" java.lang.StackOverflowError Allgemeine Java-Themen 6
T Merkwürdiges Thread-Verhalten Allgemeine Java-Themen 6
K Thread Problem Allgemeine Java-Themen 6
W Thread sleep 30 sekunden - wenn keine Antwort bis dahin neu senden Allgemeine Java-Themen 2
H Thread bleibt stehen bei jar in jar Allgemeine Java-Themen 1
J Threads HTTP Request (Thread) dauert lange - in Android Allgemeine Java-Themen 3
F CPU Last eines Thread ausfindig machen Allgemeine Java-Themen 0
V Compiler-Fehler Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 125, Size: 125 Allgemeine Java-Themen 11
Tausendsassa Threads Einen Thread sich selbst schließen lassen Allgemeine Java-Themen 17
P Threads BufferedImage, Thread Concurrency Allgemeine Java-Themen 1
M Klasse in separaten Thread ausführen.Wie genau? Allgemeine Java-Themen 2
llabusch Thread blockiert Dialog Allgemeine Java-Themen 1
J Thread wait() Allgemeine Java-Themen 2
V Thread.sleep und InterruptedException? Allgemeine Java-Themen 1
Sogomn Thread blocken bis Taste gedrückt Allgemeine Java-Themen 5
T Starten vom Thread Allgemeine Java-Themen 3
T Wait/Notify() bei Thread Allgemeine Java-Themen 6
J Exception in thread "main" java.lang.NoClassDefFoundError Allgemeine Java-Themen 4
M Exception in thread "AWT-EventQueue-0" Allgemeine Java-Themen 6
T Fragen zum Thread-Thema Allgemeine Java-Themen 4
T Threads Input/Output im Thread - Datei ohne Inhalt Allgemeine Java-Themen 1
T Fragen zum Thread-Thema Allgemeine Java-Themen 9
C Threads Variablen in einem Thread Aktualisieren Allgemeine Java-Themen 17
U Thread beenden Allgemeine Java-Themen 3
W Threads Mit Thread und Runtime externe Programme öffnen Allgemeine Java-Themen 0
N Thread interrupt Status debuggen Allgemeine Java-Themen 6
A Thread: Code paralell ausführen in mehreren Instanzen Allgemeine Java-Themen 1
E Threads linkedlist/multi-thread problem Allgemeine Java-Themen 3
B Erkennen, wann Prozess beendet ist, dann Thread beenden. Allgemeine Java-Themen 6
A Thread Fehler absichtlich provozieren Allgemeine Java-Themen 3
B Threads Java Thread kommunizieren Allgemeine Java-Themen 12
N Thread Sicherheit im komplexen Datenmodell Allgemeine Java-Themen 7
K Thread richtig benutzen Allgemeine Java-Themen 3
K Exception in thread "AWT-EventQueue-1" Allgemeine Java-Themen 2
vandread Problem bei kleiner Thread-Übung Allgemeine Java-Themen 2
H Netbeans Warning bei Thread.sleep in Schleife Allgemeine Java-Themen 4
A eine test thread.join() frage Allgemeine Java-Themen 2
tuttle64 Verständnisprobleme mit Thread Locks Allgemeine Java-Themen 4
G Threads Thread bei Datenabfrage Allgemeine Java-Themen 3
S Thread anhalten per Button ? Allgemeine Java-Themen 3
E Thread Programmierung Allgemeine Java-Themen 2
S Threads ServerSocket-Thread soll schlafen, bis er gebraucht wird Allgemeine Java-Themen 2
V Thread schneller stoppen Allgemeine Java-Themen 2
V anstatt thread.join() einfach while schleife? Allgemeine Java-Themen 8
B Mausbewegung im Thread erkennen (hoch/runter) Allgemeine Java-Themen 6
G Linux/C++/Pthreads auf JVM zugreifen, thread safe? Allgemeine Java-Themen 10
K Threads Probleme mit Thread Allgemeine Java-Themen 13
K Threads Thread überprüfen Allgemeine Java-Themen 3
Z Threads Thread für einen Client Allgemeine Java-Themen 9
M Thread JavaFish Allgemeine Java-Themen 10
G Thread.sleep Allgemeine Java-Themen 12
M Threads Viele Aufrufe aus Thread, komisches Verhalten Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben