该程序里有几个问题:
1:stop();resume();已经建议不用
2:两个onject之间比较用==我感觉不是很妥当

解决方案 »

  1.   

    resume()是恢复,在线程被悬置suspend()时才能用来恢复它,stop()线程就死亡了。resume()当然就不起作用了。
      

  2.   

    程序一次运行一个线程只能有一次thread.start(),不能点一下start()一次,只能是挂起suspend()和resume()配合,或是wait()和nitify()配合使用
      

  3.   

    Thread.stop之后,如果想要再次启动,需要重新New一个出来。
    因为在Thread中,一旦停止,再次开始是不可能的。
      

  4.   

    多线程哪块我也不是很懂, 调了好长时间效果不是很好..
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    public class Frame1 extends JFrame implements Runnable
    {
      JTextField txtField = new JTextField(10);
      JButton btn = new JButton("start");
      JButton btn1=new JButton("stop");
      JButton btn2=new JButton("restart");
      
      boolean started = false;
      
      Thread thread=null;  public Frame1()
      {     Container con=getContentPane();
         con.setLayout(new FlowLayout());
         con.add(txtField);
         con.add(btn);
         con.add(btn1);
         con.add(btn2);
         btn.addActionListener(new Bstart());
         btn1.addActionListener(new Bstart());
         btn2.addActionListener(new Bstart());
         thread = new Thread(this);     
      }  public synchronized void run()
      {
          try
          {
            for(int i=1;i<61;i++)
            {
              thread.sleep(1000);
              txtField.setText(i+"");
              if(started == false){
                thread.wait();
              }
              else{
                thread.yield();
              }
            }
            
          }
          catch(Exception e1)
          {
        e1.printStackTrace();
          }
      }  class Bstart  implements ActionListener
      {
       public void actionPerformed(ActionEvent e)
       {
        Object s=e.getSource();
        if(s==btn)
        {
         if(!thread.isAlive()){
            thread.start();
            started = true;
         } 
         else{
            //thread.yield();
         }
         
        }
        if(s==btn1)
        {   
         try{
              //thread.wait();
              started = false;
            }
            catch(Exception ex){
              System.out.println("ex="+ex);
            }    }
        if(s==btn2)
        {
         thread.resume();
        }
       }
      }
      public static void main(String[] args)
      {
        Frame1 frame1 = new Frame1();
        frame1.setSize(300,300);
        frame1.setVisible(true);
      }
    }
      

  5.   

    cuilichen(fjfjfjfj)
    他说的已经很对了,你将线程停止了,相当于生命周期结束了,怎么能重新开始呢?
    除非你Thread.wait();让它停顿,而不是让它停止!
      

  6.   


    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;public class Frame1 extends JFrame implements Runnable {    JTextField txtField = new JTextField(10);
        JButton btn = new JButton("start");
        JButton btn1 = new JButton("stop");
        JButton btn2 = new JButton("restart");
        Thread thread = null;
        private volatile boolean threadSuspended = false;    public Frame1() {        Container con = getContentPane();
            con.setLayout(new FlowLayout());
            con.add(txtField);
            con.add(btn);
            btn1.setEnabled(false);
            btn2.setEnabled(false);
            con.add(btn1);
            con.add(btn2);
            btn.addActionListener(new Bstart());
            btn1.addActionListener(new Bstart());
            btn2.addActionListener(new Bstart());
            thread = new Thread(this);    }    public void run() {
            try {
                for (int i = 1; i < 61; i++) {
                    Thread.sleep(1000);
                    txtField.setText(i + "");
                    synchronized (thread) {
                        while (threadSuspended)
                            thread.wait();
                    }
                }
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }    class Bstart implements ActionListener {        public void actionPerformed(ActionEvent e) {
                Object s = e.getSource();
                if (s == btn) {
                    thread.start();
                    btn.setEnabled(false);
                    btn1.setEnabled(true);
                }
                if (s == btn1) {
                    threadSuspended = true;
                    btn1.setEnabled(false);
                    btn2.setEnabled(true);
                }
                if (s == btn2) {
                    threadSuspended = false;
                    btn1.setEnabled(true);
                    btn2.setEnabled(false);
                    synchronized (thread) {
                        thread.notifyAll();
                    }
                }
            }
        }    public static void main(String[] args) {
            Frame1 frame1 = new Frame1();
            frame1.setSize(300, 300);
            frame1.setDefaultCloseOperation(EXIT_ON_CLOSE);
            frame1.setVisible(true);
        }
    }