我的 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/