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