java - SwingWorker线程即使任务完成也没有关闭?

标签 java multithreading swing swingworker

我的 java 项目中有一个 swingworker。 我使用 netbean“profiler”来监视线程。 我不知道为什么 swingworker 线程仍然存在于 NetBeans 的分析器的监视器中,并且处于“等待”状态。换句话说,如果我点击按钮 b 10 次,就会有 10 个 swingworker 线程! 谢谢。

  public static void main(String[] args) {
    // TODO code application logic here
    final JFrame f = new JFrame();
    f.setLayout(new BorderLayout());
    f.setSize(400, 400);
    b = new JButton("B1");      
    f.add(b,BorderLayout.CENTER);
    b.addActionListener(new ActionListener() {           
        @Override
        public void actionPerformed(ActionEvent e) {
           new SwingWorker() {

                @Override
                protected Object doInBackground() throws Exception {
                    return null;
                }
            }.execute();
        }
    });

    f.setVisible(true);
}

最佳答案

要详细说明我的评论,请查看此代码修改后的输出:

import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;

public class Foo002 {

   public static void main(String[] args) {
      final JFrame f = new JFrame();
      f.setLayout(new BorderLayout());
      f.setSize(400, 400);
      JButton b = new JButton("B1");
      f.add(b, BorderLayout.CENTER);
      b.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent e) {
            new SwingWorker() {

               @Override
               protected Object doInBackground() throws Exception {
                  Thread current = Thread.currentThread();
                  System.out.printf("ID: %d, Name: %s%n", current.getId(), current.getName());
                  System.out.println("Active Count: " + Thread.activeCount());
                  return null;
               }
            }.execute();
         }
      });

      f.setVisible(true);
   }
}

关于java - SwingWorker线程即使任务完成也没有关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7383301/

相关文章:

java - 处理类之间的事件

java - AbstractTableModel 函数的参数不包括行和列的后缀 "Index"

java - 扫描发现在 Android 应用程序中不起作用

java - java中在单独的线程中运行许多方法并等待所有方法完成的最简单方法是什么?

c++ - 大解空间的多线程搜索

c# - Parallel.Foreach 在幕后做了什么?

java - 在 JFrame 中切换 JPanel 并返回

通过套接字缓存 Java 对象序列化/反序列化

java - 除了方法之外还使用 header 将请求路由到带注释的方法

java - 将大样本放在二叉搜索树上(不平衡)