具有多线程的 Java Swing

标签 java multithreading swing actionlistener

问题是:我有一个 swing 应用程序。只有一种形式有 2 个按钮(“开始”、“停止”)。 在这些 btns 上,我添加了带有线程类的 ActionListener。

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

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

    }

最佳答案

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

关于具有多线程的 Java Swing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15464373/

相关文章:

java - 提交 jsp 时请求的资源不可用

java - 相同的变量,不同的名称

c++ - 生产者/消费者模式的 STL 容器线程安全

java - 如何改变JButton的位置和大小?

Java Gervill 软件合成器不工作

java - Netty websocket SSL 连接 HANDSHAKE_ISSUED

c++ - 这样的类只能由多个线程设置一次吗?

iOS - 并发访问内存资源

启动时 Java GUI 应用程序框架无法正确显示?

java - 我的 JButton 被窃听了