`

使用SwingWorker取得cmd数据

阅读更多

 

  • 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

    swing swingworker wingworker wingworker

    使用SwingWorker异步加载JTree

    NULL 博文链接:https://vearn.iteye.com/blog/344591

    Swing线程的深入理解和SwingWorker基础知识介绍[参照].pdf

    Swing线程的深入理解和SwingWorker基础知识介绍[参照].pdf

    Java的Swing编程中使用SwingWorker线程模式及顶层容器

    主要介绍了在Java的Swing编程中使用SwingWorker线程模式及顶层容器的方法,适用于客户端图形化界面软件的开发,需要的朋友可以参考下

    SWT与SwingWorker的结合

    Swt一般情况不允许在另外一个线程中更新控件内容,此程序使用java swing的SwingWorker对swt的控件进行操作更新。对于喜欢使用SwingWorker更新Swing控件的人来说,也可以使用SwingWorker更新Swt控件

    Swing线程的深入理解和SwingWorker基础知识介绍

    Swing线程的深入理解和SwingWorker基础知识介绍

    swingworker排序

    作业:完善swingworker排序功能

    Swing线程的最后讨论 -- 利用异步模型

    第二篇文章《使用Swing Worker线程》,演示了如何使用SwingWorker线程工具类。它也可以在存档中找到。 本文介绍了修订过的SwingWorker类,并演示了和基于模型的组件(model-based components)如JTable和JTree同时...

    Swing线程的最后讨论--利用异步模型

    第二篇文章《使用SwingWorker线程》,演示了如何使用SwingWorker线程工具类。它也可以在存档中找到。本文介绍了修订过的SwingWorker类,并演示了和基于模型的组件(model-basedcomponents)如JTable和JTree同时使

    An Alternative to SwingWorker.java-开源

    SwingWorker的替代品,用于在Swing中执行异步任务。 我们将SwingWorker.java与Action接口合并,生成AbstractAsynchronousAction.java。 此类的具体扩展可以用来代替任何Action。

    开发J2EE应用的要领

    第二篇文章《使用SwingWorker线程》,演示了如何使用SwingWorker线程工具类。它也可以在存档中找到。本文介绍了修订过的SwingWorker类,并演示了和基于模型的组件(model-basedcomponents)如JTable和JTree同时使

    ProcessBar 2种经典实现

    NULL 博文链接:https://chenhailong.iteye.com/blog/1312202

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例149 使用SwingWorker类完成耗时操作 194 第7章 反射与异常处理 195 7.1 反射的基础 196 实例150 实例化Class类的5种方式 196 实例151 获得Class对象表示实体的名称 197 实例152 查看类的声明 198 实例153 查看类...

    swing-worker-troubleshooting:回购以解决SwingWorker的问题

    要通过修改代码来使用AnalysisWorker ,看到里面的代码注释SimpleApp的上单击处理程序analyzeButton 。 您只需要注释掉try-catch块并取消注释工作代码即可。 此外,该解决方案还需要: 处理从工作程序内部抛出的...

    swing-worker-1.1.jar

    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....

    ChatWorld 聊天室

    最近由于课程需要做的用Swing做的一个聊天室软件,主要使用Java Socket进行通信,还有用到SwingWorker做多线程和XML进行数据存储。 做的比较粗糙,我附上源码了,不足的地方请大家指出来,共同进步

    java动态按钮

    运用javax.swingworker类生成DynamicJButton示例

Global site tag (gtag.js) - Google Analytics