2017-10-24 13 views
0

私のコードを実行するとこの例外が発生します。コードはうまく動作しますが、端末でいくつかの例外が発生します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) 

何が間違っていますか?

start()方法は

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

したがって、すでに終了しているスレッドを開始しようとしましたか? – MadProgrammer

+0

私のコードを添付しますか? –

+0

私は私のstart()メソッドを与えて、すでに完了しているスレッドを開始する方法がありません –

答えて

1

あなたは許可されていない、二度同じThreadを開始するように見えます。

同じスレッドを再利用する場合は、代わりにExecutorServiceを作成することをおすすめします。

0

HelperThreadがnullでない場合(すでに存在している)、HelperThread.start()は、既に開始または終了しているスレッドを開始しようとします。処理を再開したい場合は、最初にスレッドを停止する必要があります。これを正常に行うには、実際のスレッドでwhile(running){}パターンを使用します。その後、スタートINT() - メソッドは、フラグをfalseに設定し、死ぬし、新しいスレッドを開始するスレッドを待つ:

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(); 
} 

また、サイドノートとして、最初のように大文字を使用しないよう変数の文字。むしろ "helperThread"でなければなりません。

関連する問題