Java中SwingWorker类的重要性是什么?
SwingWorker 类使我们能够在工作线程中执行异步任务(例如长时间运行的任务),然后根据任务结果从事件分发线程 (EDT) 更新 Swing 组件。它是在Java 1.6 版本中引入的。
SwingWorker 类
- java.swing.SwingWorker 类是一个任务工作器,它在后台执行耗时的任务。
- 一个SwingWorker 实例与 3 个线程交互:当前线程、工作线程和事件分发线程 (EDT)。
- 当前线程调用execute() 方法将任务启动到后台并立即返回。
- 工作线程在后台持续执行我们自己的doInBackground() 方法版本。
- 事件分发线程 (EDT) 不时醒来,通知我们工作线程中发生了什么。
- 当doInBackground() 结束时,事件分发线程 (EDT) 通过调用我们自己的done() 方法版本来通知我们。
- 要发布中间值,我们可以在doInBackground() 中调用publish(V) 方法。事件分发线程 (EDT) 通过调用我们自己的process(List) 方法来通知我们。
- 要更新进度属性,我们可以在doInBackground() 中调用setProgress(i) 方法。事件分发线程 (EDT) 通过调用我们自己的PropertyChangeListener 类版本来通知我们。
- java.swing.JProgressbar 类是一个 UI 组件,旨在显示作为SwingWorker 实例实现的后台任务的进度。
示例
import java.awt.*;
import java.awt.event.*;;
import javax.swing.*;
public class SwingWorkerTest {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
JButton button = new JButton();
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new GUIWorker().execute();
}
});
button.setText("Click Me !!!");
frame.getContentPane().add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setSize(350, 300);
frame.setVisible(true);
}
});
}
}
class GUIWorker extends SwingWorker {
private JFrame frame = new JFrame();
private JDialog dialog = new JDialog(frame, "Swingworker Test", true);
private JProgressBar progressBar = new JProgressBar();
public GUIWorker() {
progressBar.setString("Waiting on time");
progressBar.setStringPainted(true);
progressBar.setIndeterminate(true);
dialog.getContentPane().add(progressBar);
dialog.setSize(350, 300);
dialog.setModal(false);
dialog.setLocationRelativeTo(null);
dialog.setVisible(true);
}
@Override
protected Integer doInBackground() throws Exception {
System.out.println( "GUIWorker doInBackground()" );
Thread.sleep(10000);
return 0;
}
@Override
protected void done() {
System.out.println("done");
JLabel label = new JLabel("Task Complete");
dialog.getContentPane().remove(progressBar);
dialog.getContentPane().add(label);
dialog.getContentPane().validate();
}
}输出
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP