2016-06-09 17 views
0

Ich habe ein Problem in Java über Threading, es ist mit einem einzigen Thread und es geht darum, einen Thread zu stoppen und fortzufahren.Java Simple und Single Threading IllegalMonitorStateException

Was mein Code tut: Klasse MainWindow Erstellt eine Threadreferenz und in einem Endloop startet und stoppt es.

Die Klasse MyThread startet den Thread. Die run-Methode ist ziemlich kurz und alles was man tut, ist zu tun: 1. Bewegen Sie die Maus auf der linken Seite des Bildschirms dann 2. Bewegen Sie die Maus auf der rechten Seite des Bildschirms

Wenn ich das Programm starten Ich bekomme sofort eine IllegalMonitorStateException und weiß nicht, wie ich es beheben kann.

public class MainWindow 
{ 
    public static void main(String[] args) throws Exception 
    { 
     MyThread mt = new MyThread(); 
     while(true) 
     { 
      mt.start(); 
      Thread.sleep(1000); 
      mt.wait(); 
     } 
    } 
} 

public class MyThread implements Runnable 
{ 
    private Thread th; 
    public MyThread() throws Exception 
    { 
     th = new Thread(); 
     th.start(); 
    } 
    public void start() throws InterruptedException 
    { 
     synchronized(this){ 
     th.wait(); 
     } 
    } 
    public void wait() 
    { 
     synchronized(this){ 
     th.notifyAll(); 
     } 
    } 
    @Override 
    public void run() 
    { 
     //do something 
    } 
} 

Danke für jede Hilfe! :)

+1

Sie machen alles falsch. Sie können einem Thread nicht mitteilen, dass er warten soll, indem er die 'Thread # wait()' Methode aufruft. Diese Methode macht etwas völlig anderes. – zapl

+0

Oh ok ich sehe, ich denke ich habe es, es ist nur für Multithreading. Ich habe es benutzt, weil ich den Thread stoppen musste, aber ich habe gelesen, dass, wenn der Thread durch die run-Methode läuft, er auch stirbt, also konnte ich ihn nicht stoppen ... ich muss noch ein paar Sachen lesen und nochmal versuchen – SergSam

+0

Ja, du ' lch muss ein bisschen lesen :) Ihre Run-Methode wird übrigens überhaupt nicht verwendet, Sie müssen das 'Runnable' an den Thread übergeben, den es konstruiert (zB' th = new Thread (this); '), einfach haben Ein Thread und eine Run-Methode im Code in der Nähe funktioniert nicht. – zapl

Antwort

0
while(true) 
     { 
      mt.start(); 
      Thread.sleep(1000); 
      mt.wait(); 
     } 

Sie sollten den laufenden Thread nicht ausführbar machen. ie) Sie können den laufenden Thread nicht starten.