- SwingWorker可以在后台执行耗时的任务,而避免阻塞前端的用户程序,避免界面长时间无响应
- SwingWorker有2个参数T , V
- T:为最终结果集 对应doInBackground方法前的返回值类型。通过调用swingworker的get方法可以取得返回值。
- V:为中间结果集 对应process方法的参数list的数据类型
- 在doInBackground方法中调用publish方法(注意publish方法只在SwingWorker类中实现)。可以发送中间结果V,然后这个结果由被发送到在EDT线程中的process方法中进行处理。
当doInBackground处理完后,会自动调用done方法。
我的例子是使用swingworker在后台取得adb logcat(该命令是安卓调试桥)命令产生的数据,你可以换成其他cmd命令,比如netstat命令
public class RunTest extends SwingWorker<Void, String>{
private JTextArea taConsole;
public RunTest(JTextArea taConsole){
this.taConsole = taConsole;
}
@Override
protected Void doInBackground() throws Exception {
try {
String cmd ="adb logcat";
Process process = Runtime.getRuntime().exec(cmd);
InputStream input = process.getInputStream();
InputStreamReader inr = new InputStreamReader(input,"UTF-8");
BufferedReader reader = new BufferedReader(inr);
String line = "";
while((line = reader.readLine()) != null){
publish(line);//publish将产生的中间结果传递给process,由process方法进行处理
}
reader.close();
process.waitFor();
}catch (Exception e) {
// TODO: handle exception
}
return null;
}
protected void done(){
System.out.println("后台方法运行结束");
}
protected void process(List<String> list){
for (String line :list){
if (line.trim().equals("")){
continue;
}else {
taConsole.append(line+"\n");
//在这里可以将line分割,得到自己想要的形式,并显示在前台界面上
//可以为日志分等级
char ch = line.charAt(0);
//...
}
}
}
}
相关推荐
这篇博客“使用SwingWorker异步加载JTree”详细介绍了如何利用SwingWorker来加载大型数据集到JTree组件,避免阻塞UI。 首先,我们需要了解JTree。JTree是Swing中的一个组件,它用来展示树形结构的数据,常用于文件...
本文将深入了解 Swing 线程的工作机制,并介绍如何使用 SwingWorker 来解决常见的问题。 一、Swing 线程的工作机制 在 Swing 中,所有的 GUI 组件都是在一个单独的线程中执行的,这个线程被称为 Event Dispatch ...
swing swingworker wingworker wingworker
在上面的代码中,我们使用SwingWorker来执行lookup()方法,然后使用`invokeLater()`方法将结果返回到Swing线程中处理。这保证了GUI界面不会freeze或卡顿。 Swing线程的深入理解和SwingWorker基础知识是Java程序设计...
在Swing编程中,正确使用SwingWorker和顶层容器可以创建出高效且响应迅速的GUI应用。开发者应该遵循Swing的线程规则,避免在EDT中执行长时间任务,利用SwingWorker进行异步处理,以确保用户界面的流畅性和稳定性。...
Swt一般情况不允许在另外一个线程中更新控件内容,此程序使用java swing的SwingWorker对swt的控件进行操作更新。对于喜欢使用SwingWorker更新Swing控件的人来说,也可以使用SwingWorker更新Swt控件
5. **监听SwingWorker的状态**:你可以使用SwingWorker提供的`addPropertyChangeListener`来监听任务的状态变化,如`state`、`progress`等,以便在UI上显示进度条或通知用户任务状态。 在实际应用中,你可以这样做...
6. **SwingWorker**: 当处理大量数据或进行耗时操作(如加载远程数据)时,为了避免阻塞用户界面,你可以使用 `SwingWorker` 类。它允许在后台线程中执行任务,并在完成后更新 `JTable`。 7. **JavaFX TableView**:...
可以使用`SwingWorker`或者直接创建`Thread`来实现异步处理。 5. **兼容不同类型的扫码枪** - 不同品牌的扫码枪可能有不同的数据格式和编码方式。在实际应用中,可能需要根据具体的扫码枪设备进行适配,例如处理...
7. **Swing Worker**:为了在后台线程加载数据,避免阻塞UI,我们可以使用SwingWorker。这是一个异步执行任务并提供进度反馈的类,确保UI的流畅性。 8. **优化代码**:描述中提到“优化了网上的下拉框代码”,可能...
为了不影响用户界面的响应性,后台数据处理可能在单独的线程中进行,如使用SwingWorker。同时,事件监听器如ActionListener和ItemListener被用于响应用户的点击、选择等操作。 9. 国际化支持: 对于大型项目,...
例如,在Java中,我们可以使用`SwingWorker`或`ExecutorService`来创建后台线程,执行数据初始化或其他耗时操作,然后通过回调或发布事件来更新进度条。在Android中,可以使用`AsyncTask`或者`IntentService`来实现...
在实验中,我们成功地使用 SwingWorker,V> 来处理后台线程,并将结果显示在界面上。 六、实验代码: 下面是实验中的部分代码: public class ClientUI extends javax.swing.JFrame { // 获取要发送的消息条数 ...
在GUI应用程序中,当执行耗时操作如文件读写、网络通信或大数据处理时,为了提高用户体验,通常会使用进度条(JProgressBar)来显示任务的进度。在某些情况下,我们无法预估任务的具体完成时间,这时我们可以使用...
可以使用`SwingUtilities.invokeLater()`或`SwingWorker`来实现。 8. **源码阅读和调试**:下载的源码可以作为学习的实例,通过阅读和运行代码,理解每个步骤是如何实现的,有助于加深对Java网络和图形编程的理解。...
- **SwingWorker**:对于Swing应用,可以使用SwingWorker来确保网络请求在后台执行。 6. **API接口**: - **外汇API**:如Open Exchange Rates、Exchange Rates API等,提供实时或历史汇率数据。 - **API调用**...
标题中的“ProgressBar 2种经典实现”指的是在编程中如何创建和使用进度条控件,通常在用户界面(UI)中显示任务执行的进度。在软件开发中,进度条是提高用户体验的重要元素,因为它可以向用户反馈程序正在执行的...
例如,使用setCellRenderer方法可以改变表格、列表或树中数据的显示方式;使用setPreferredSize可以调整组件的大小;使用setDefaultCloseOperation可以设置窗口关闭时的行为。 6. **布局管理**:Swing提供了多种...
1. 异步处理:为了防止因网络延迟导致界面冻结,查询操作通常在后台线程执行,使用SwingWorker或者CompletableFuture来实现。 2. 错误处理:对可能出现的网络异常、数据解析错误等进行捕获和处理,向用户提供友好的...
例如,JTable 可以配合 SwingWorker 使用,实现后台加载数据,避免阻塞UI线程。 对于用户交互,表格组件提供了各种事件处理器,如MouseListener和KeyListener,用于响应用户的点击、拖动和键盘操作。这些事件可以...