java重复SwingWorker
我想构建一个JFrame
能够在每次单击JButton
时运行后台任务。目前我使用的是swing worker,它不允许任务执行多次
如何使用JButton
单击为SwingWorker
启用重复任务
public class ScanFileFrame extends JFrame{
JButton btnTicking;
JLabel label1;
ScanFileFrame(){
JFrame jframe = new JFrame();
jframe.setLayout(new FlowLayout());
btnTicking = new JButton("Start Scanning Files");
label1 = new JLabel("No File Scanned");
btnTicking.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
worker.execute();
}
});
jframe.add(btnTicking);
jframe.add(label1);
jframe.setVisible(true);
jframe.setSize(300,300);
}
SwingWorker<Boolean, Void> worker = new SwingWorker<Boolean, Void>() {
@Override
protected Boolean doInBackground() throws Exception {
// Simulate scan file
System.out.println("scanning files ....");
Thread.sleep(2000);
return true;
}
//update jframe jlabel when background task finish
protected void done() {
label1.setText("Files Scanned");
System.out.println("complete");
}
};
public static void main(String[] args){
ScanFileFrame f = new ScanFileFrame();
}
}
# 1 楼答案
这不是一个问题,因为您只需要构造一个新的SwingWorker并在JButton的ActionListener中运行它。据我所知,这是你目前所写问题的解决方案。如果你需要一个更详细的答案,那么你需要在你的问题中提供更多的细节
编辑您声明:
你如何“改造”任何对象?通过创建一个新实例,这里是一个新的MySwingWorker,然后对其调用execute
例如:
请注意,您总是希望在SwingWorker完成后调用
get()
,即使它返回null,这样您就可以捕获SwingWorker运行期间可能发生的任何异常