java.lang.IllegalMonitorStateException: current thread not owner
at test.start(test.java:15)
at test.main(test.java:5) |
public synchronized void sleep(long msec)
{ //指定ミリ秒実行を止めるメソッド
try
{
wait(msec);
}catch(InterruptedException e){}
} |
/** [ThreadTimer.java] スレッドを使用 */
import java.awt.*;
public class ThreadTimer extends Frame implements Runnable
{
Thread th;
long count=0;
public static void main(String[] args)
{
new ThreadTimer();
}
public ThreadTimer()
{
resize(140,50); //ウインドウサイズを140x50に設定
setTitle("ThreadTimer");
show();
start();
}
private void start()
{
th=new Thread(this); //スレッドを生成
th.start(); //スレッドを開始
}
public void run()
{
while(true)
{
count++;
repaint(); //paintメソッドを呼び出す
try
{
th.sleep(1000); //1秒間止める
}catch(InterruptedException e){}
}
}
public void paint(Graphics g)
{ //countの値を表示する
g.setColor(Color.blue);
g.drawString("Count : "+count,30,40);
}
public boolean handleEvent(Event ev)
{
if(ev.id==Event.WINDOW_DESTROY)
{ //閉じるボタンがクリックされた
th.stop(); //スレッドを停止
dispose();
System.exit(0);
}
return super.handleEvent(ev);
}
}
|
/** [ThreadTimer.java] waitメソッドを使用 */
import java.awt.*;
public class WaitTimer extends Frame
{
long count=0;
public static void main(String[] args)
{
new WaitTimer();
}
public WaitTimer()
{
resize(140,50); //ウインドウサイズを140x50に設定
setTitle("WaitTimer");
show();
start();
}
private void start()
{
while(true)
{
count++;
repaint(); //paintメソッドを呼び出す
sleep(1000); //1秒間止める
}
}
public synchronized void sleep(long msec)
{ //指定ミリ秒実行を止めるメソッド
try
{
wait(msec);
}catch(InterruptedException e){}
}
public void paint(Graphics g)
{ //countの値を表示する
g.setColor(Color.blue);
g.drawString("Count : "+count,30,40);
}
public boolean handleEvent(Event ev)
{ //閉じるボタンがクリックされた
if(ev.id==Event.WINDOW_DESTROY)
{
dispose();
System.exit(0);
}
return super.handleEvent(ev);
}
}
|