2

问题是:我有一个摇摆应用程序。只有一种带有 2 个 btns 的表单(“开始”、“停止”)。在这些 btns 上,我在里面添加了带有线程类的 ActionListener。

当我单击 btn“开始”时,我想在新线程中开始一些工作,并在单击 btn“停止”时结束该工作。与此有点相似的代码在控制台中可以正常工作,但在摇摆不定。任何帮助表示赞赏。提前致谢。)

    class Action implements ActionListener{
        class MyThread extends Thread{
             boolean live = true;

             @Override
             public void run() {            
                while(live)
                     System.out.println("doing...");
             }              

              public void shutDown(){   
                 live = false;
             }
        }
        @Override
        public void actionPerformed(ActionEvent e) {
             JButton source = (JButton) e.getSource();
             MyThread t = new MyThread();
             switch (source.getText()) {
             case "Start":
                  t.start();
                  break;
             case "Stop":
                  t.shutDown();
                  break;
    }

还有那个简单的形式

    public class App extends JFrame {
        public static void main(String[] args) {
            App app = new App();
            app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            app.setVisible(true);

            JButton btn1 = new JButton("Start");
            JButton btn2 = new JButton("Stop");

            app.getContentPane().add(btn1, BorderLayout.WEST);
            app.getContentPane().add(btn2, BorderLayout.EAST);

            Action action = new Action();

            btn1.addActionListener(action);
            btn2.addActionListener(action);
        }

    }
4

1 回答 1

2

每次单击按钮时,您都会创建一个新的 Thread 对象,因此您停止的线程与您启动的线程不同。您需要保留对您在启动时创建的线程的引用,以便以后可以再次停止它。

于 2013-03-17T18:20:42.277 回答