Java Swing具有多个线程

时间:2013-03-17 18:16:40

标签: java multithreading swing actionlistener

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

当我点击btn“开始”并点击btn“停止”时,我想在新线程中开始一些工作。代码有点类似于这在控制台中可以正常工作,但在摇摆的doest中。任何帮助赞赏。提前致谢。 )

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

    }

1 个答案:

答案 0 :(得分:2)

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