- 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);
//...
}
}
}
}
相关推荐
swing swingworker wingworker wingworker
NULL 博文链接:https://vearn.iteye.com/blog/344591
Swing线程的深入理解和SwingWorker基础知识介绍[参照].pdf
主要介绍了在Java的Swing编程中使用SwingWorker线程模式及顶层容器的方法,适用于客户端图形化界面软件的开发,需要的朋友可以参考下
Swt一般情况不允许在另外一个线程中更新控件内容,此程序使用java swing的SwingWorker对swt的控件进行操作更新。对于喜欢使用SwingWorker更新Swing控件的人来说,也可以使用SwingWorker更新Swt控件
Swing线程的深入理解和SwingWorker基础知识介绍
作业:完善swingworker排序功能
第二篇文章《使用Swing Worker线程》,演示了如何使用SwingWorker线程工具类。它也可以在存档中找到。 本文介绍了修订过的SwingWorker类,并演示了和基于模型的组件(model-based components)如JTable和JTree同时...
第二篇文章《使用SwingWorker线程》,演示了如何使用SwingWorker线程工具类。它也可以在存档中找到。本文介绍了修订过的SwingWorker类,并演示了和基于模型的组件(model-basedcomponents)如JTable和JTree同时使
SwingWorker的替代品,用于在Swing中执行异步任务。 我们将SwingWorker.java与Action接口合并,生成AbstractAsynchronousAction.java。 此类的具体扩展可以用来代替任何Action。
第二篇文章《使用SwingWorker线程》,演示了如何使用SwingWorker线程工具类。它也可以在存档中找到。本文介绍了修订过的SwingWorker类,并演示了和基于模型的组件(model-basedcomponents)如JTable和JTree同时使
NULL 博文链接:https://chenhailong.iteye.com/blog/1312202
实例149 使用SwingWorker类完成耗时操作 194 第7章 反射与异常处理 195 7.1 反射的基础 196 实例150 实例化Class类的5种方式 196 实例151 获得Class对象表示实体的名称 197 实例152 查看类的声明 198 实例153 查看类...
要通过修改代码来使用AnalysisWorker ,看到里面的代码注释SimpleApp的上单击处理程序analyzeButton 。 您只需要注释掉try-catch块并取消注释工作代码即可。 此外,该解决方案还需要: 处理从工作程序内部抛出的...
Exceptionin thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/jdesktop/swingworker/SwingWorker at com.android.draw9patch.Application$1.run(Application.java:48) at java.awt.event....
最近由于课程需要做的用Swing做的一个聊天室软件,主要使用Java Socket进行通信,还有用到SwingWorker做多线程和XML进行数据存储。 做的比较粗糙,我附上源码了,不足的地方请大家指出来,共同进步
运用javax.swingworker类生成DynamicJButton示例