我的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);
}
答案 0 :(得分:7)
要详细说明我的评论,请查看代码修改的输出:
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);
}
}
答案 1 :(得分:2)
不是,那不是SwingWorker
或类似的东西,请阅读tutorial,如何正确构建和使用SwingWorker
,如果没有方法完成,检查发生了什么()或错过参考Future<?>
(从教程中复制)SwingWorker worker = new SwingWorker<ImageIcon[], Void>()