2017-10-24 4 views
0

Ich bekomme diese Ausnahme, wenn ich meinen Code ausführen. Auch wenn der Code gut läuft, ich bin immer einige Ausnahmen auf dem TerminalIllegal State Ausnahme in Java

Exception in thread "AWT-EventQueue-1" java.lang.IllegalThreadStateException 
    at java.lang.Thread.start(Thread.java:708) 
    at SR.start(SR.java:38) 
    at SR.mouseClicked(SR.java:212) 
    at java.awt.Component.processMouseEvent(Component.java:6536) 
    at java.awt.Component.processEvent(Component.java:6298) 
    at java.awt.Container.processEvent(Container.java:2236) 
    at java.awt.Window.processEvent(Window.java:2025) 
    at java.awt.Component.dispatchEventImpl(Component.java:4889) 
    at java.awt.Container.dispatchEventImpl(Container.java:2294) 
    at java.awt.Window.dispatchEventImpl(Window.java:2746) 
    at java.awt.Component.dispatchEvent(Component.java:4711) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 
    at java.awt.EventQueue.access$500(EventQueue.java:97) 
    at java.awt.EventQueue$3.run(EventQueue.java:709) 
    at java.awt.EventQueue$3.run(EventQueue.java:703) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) 
    at java.awt.EventQueue$4.run(EventQueue.java:731) 
    at java.awt.EventQueue$4.run(EventQueue.java:729) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 
    at org.GNOME.Accessibility.AtkWrapper$5.dispatchEvent(AtkWrapper.java:700) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

Was mache ich falsch ??

Meine start() Methode

private void start() throws IllegalStateException { 
    if (HelperThread == null) 
     HelperThread = new Thread(this); 
    HelperThread.start(); 
} 
+1

Sie haben also versucht, einen Thread zu starten, der bereits fertig ist? – MadProgrammer

+0

Soll ich meinen Code anhängen? –

+0

Ich habe meine start() -Methode angegeben und es gibt keine Möglichkeit, dass ich einen Thread starten kann, der bereits fertig ist. –

Antwort

1

Sie scheinen die gleiche Thread zweimal zu starten, was nicht erlaubt ist.

Wenn Sie den gleichen Thread wiederverwenden möchten, würde ich empfehlen, stattdessen einen ExecutorService zu erstellen.

0

Das Problem ist, dass, wenn HelperThread nicht null ist (es existiert bereits) und Sie HelperThread.start() aufrufen, versucht,() einen Thread zu starten, der bereits gestartet wurde oder die Verarbeitung beendet. Wenn Sie die Verarbeitung erneut starten möchten, müssen Sie den Thread zuerst stoppen. Um dies anmutig auszuführen, verwenden Sie ein while (running) {} -Muster im aktuellen Thread. Dann den Start int() - Methode, das Kennzeichen auf falsch, für den Thread warten, um zu sterben und dann einen neuen Thread starten:

private void start() throws IllegalStateException { 
    if (HelperThread != null) { 
     running = false; 
     HelperThread.join(); // wait for it to die... 
    } 

    // Start fresh... 
    HelperThread = new Thread(this); 
    HelperThread.start(); 
} 

Auch als eine Randnotiz, vermeiden Großbuchstaben als ersten mit Buchstaben für Variablen. Es sollte eher "helperThread" sein.