Java如何使用SwingWorker执行后台任务?
该演示给出了使用SwingWorker该类的示例。目的SwingWorker是实现一个后台线程,您可以使用该线程执行耗时的操作,而不会影响程序GUI的性能。
package org.nhooo.example.swing;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
import javax.swing.WindowConstants;
import java.awt.Dimension;
import java.awt.FlowLayout;
public class SwingWorkerDemo extends JFrame {
public SwingWorkerDemo() {
initialize();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new SwingWorkerDemo().setVisible(true));
}
private void initialize() {
this.setLayout(new FlowLayout());
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JButton processButton = new JButton("Start");
JButton helloButton = new JButton("Hello");
processButton.addActionListener(event -> {
LongRunProcess process = new LongRunProcess();
try {
process.execute();
} catch (Exception e) {
e.printStackTrace();
}
});
helloButton.addActionListener(e ->
JOptionPane.showMessageDialog(null, "Hello There"));
this.getContentPane().add(processButton);
this.getContentPane().add(helloButton);
this.pack();
this.setSize(new Dimension(300, 80));
}
static class LongRunProcess extends SwingWorker<Integer, Integer> {
protected Integer doInBackground() {
int result = 0;
for (int i = 0; i < 10; i++) {
try {
result += i * 10;
System.out.println("Result = " + result);
// 睡眠一段时间以模拟一个漫长的过程
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
@Override
protected void done() {
System.out.println("LongRunProcess.done");
}
}
}
以上是 Java如何使用SwingWorker执行后台任务? 的全部内容, 来源链接: utcz.com/z/326333.html