在JFrame调用一个自己重写的线程MyThread类,里面run函数中为sleep(1000)后打印数字。现在要想在JFrame增加一个暂停按钮,点了之后打印数字暂停,再点打印继续。请问怎么实现啊?suspend和resume已经废弃了吧?也不知道该怎么用wait和notify

解决方案 »

  1.   

    同步方法中wait。点击的时候notify,可以指定线程唤醒执行,也可以notifyAll全部唤醒。
      

  2.   

    增加一个boolean boo = false
    每次点击的时候根据boo的值判断是暂停还是唤醒,最后boo=!boo;
      

  3.   

    不知道可以不/*
     * file: Pause.java
     * class: Pause
     *
     * description: 
     *
     * @author:  leisore
     * @version: V1.0.0
     */
    package cn.leisore.daily._2010_06_24;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;public class PauseDemo extends Thread {    private int counter = 0;
        private Object obj = new Object();
        private boolean pause = false;
        private volatile boolean stop = false;    public PauseDemo() {
            super();
        }    public void run() {
            while (!stop) {
                synchronized (obj) {
                    System.out.println("run:" + counter++);
                }            try {
                    sleep(1000);
                } catch (InterruptedException e) {
                    // e.printStackTrace();
                }            synchronized (obj) {
                    if (pause) {
                        try {
                            System.out.println("pause");
                            obj.wait();
                        } catch (InterruptedException e) {
                            // e.printStackTrace();
                        }                    pause = false;
                    }
                }
            }
        }    public void pause() {
            synchronized (obj) {
                if (!pause) {
                    pause = true;
                    interrupt();
                    obj.notifyAll();
                }
            }
        }    public void next() {
            synchronized (obj) {
                if (pause) {
                    pause = false;
                    obj.notifyAll();
                }
            }
        }    public void shutdown() {
            synchronized (obj) {
                if (!stop) {
                    stop = true;
                    interrupt();
                    obj.notifyAll();
                }
            }
        }    public static void main(String[] args) {
            final PauseDemo pd = new PauseDemo();
            pd.start();        new Thread() {
                public void run() {
                    BufferedReader br = new BufferedReader(new InputStreamReader(
                            System.in));
                    String line = null;
                    boolean stop = false;
                    while (!stop) {
                        try {
                            line = br.readLine();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        if ("p".equalsIgnoreCase(line)) {
                            pd.pause();
                        } else if ("n".equalsIgnoreCase(line)) {
                            pd.next();
                        } else if ("s".equalsIgnoreCase(line)) {
                            pd.shutdown();
                            stop = true;
                        }
                    }
                }
            }.start();
        }
    }
      

  4.   


    谢谢了,分都给你吧 但是你设置如果在sleep的时候调用interrupt();会抛interruptedException的异常,我反正就单线程所以就注掉了,如果有改进意见别忘告诉我~~