`

使用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异步加载JTree

    这篇博客“使用SwingWorker异步加载JTree”详细介绍了如何利用SwingWorker来加载大型数据集到JTree组件,避免阻塞UI。 首先,我们需要了解JTree。JTree是Swing中的一个组件,它用来展示树形结构的数据,常用于文件...

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

    本文将深入了解 Swing 线程的工作机制,并介绍如何使用 SwingWorker 来解决常见的问题。 一、Swing 线程的工作机制 在 Swing 中,所有的 GUI 组件都是在一个单独的线程中执行的,这个线程被称为 Event Dispatch ...

    Swingworker

    swing swingworker wingworker wingworker

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

    在上面的代码中,我们使用SwingWorker来执行lookup()方法,然后使用`invokeLater()`方法将结果返回到Swing线程中处理。这保证了GUI界面不会freeze或卡顿。 Swing线程的深入理解和SwingWorker基础知识是Java程序设计...

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

    在Swing编程中,正确使用SwingWorker和顶层容器可以创建出高效且响应迅速的GUI应用。开发者应该遵循Swing的线程规则,避免在EDT中执行长时间任务,利用SwingWorker进行异步处理,以确保用户界面的流畅性和稳定性。...

    SWT与SwingWorker的结合

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

    swingworker排序

    5. **监听SwingWorker的状态**:你可以使用SwingWorker提供的`addPropertyChangeListener`来监听任务的状态变化,如`state`、`progress`等,以便在UI上显示进度条或通知用户任务状态。 在实际应用中,你可以这样做...

    Java显示数据表格的例子.rar

    6. **SwingWorker**: 当处理大量数据或进行耗时操作(如加载远程数据)时,为了避免阻塞用户界面,你可以使用 `SwingWorker` 类。它允许在后台线程中执行任务,并在完成后更新 `JTable`。 7. **JavaFX TableView**:...

    java后台获取扫码枪数据.7z

    可以使用`SwingWorker`或者直接创建`Thread`来实现异步处理。 5. **兼容不同类型的扫码枪** - 不同品牌的扫码枪可能有不同的数据格式和编码方式。在实际应用中,可能需要根据具体的扫码枪设备进行适配,例如处理...

    java swing 多选下拉框 支持动态加载数据

    7. **Swing Worker**:为了在后台线程加载数据,避免阻塞UI,我们可以使用SwingWorker。这是一个异步执行任务并提供进度反馈的类,确保UI的流畅性。 8. **优化代码**:描述中提到“优化了网上的下拉框代码”,可能...

    swing project酒店数据管理客户端

    为了不影响用户界面的响应性,后台数据处理可能在单独的线程中进行,如使用SwingWorker。同时,事件监听器如ActionListener和ItemListener被用于响应用户的点击、选择等操作。 9. 国际化支持: 对于大型项目,...

    完成数据初始化、修改进度条组件进度变化的线程类.zip_修改进度条组件进度变化的线程类_完成数据初始化_进度条类

    例如,在Java中,我们可以使用`SwingWorker`或`ExecutorService`来创建后台线程,执行数据初始化或其他耗时操作,然后通过回调或发布事件来更新进度条。在Android中,可以使用`AsyncTask`或者`IntentService`来实现...

    互联网程序设计实验二0001.docx

    在实验中,我们成功地使用 SwingWorker,V&gt; 来处理后台线程,并将结果显示在界面上。 六、实验代码: 下面是实验中的部分代码: public class ClientUI extends javax.swing.JFrame { // 获取要发送的消息条数 ...

    swing不确定进度条

    在GUI应用程序中,当执行耗时操作如文件读写、网络通信或大数据处理时,为了提高用户体验,通常会使用进度条(JProgressBar)来显示任务的进度。在某些情况下,我们无法预估任务的具体完成时间,这时我们可以使用...

    Java从网络取得图像源码

    可以使用`SwingUtilities.invokeLater()`或`SwingWorker`来实现。 8. **源码阅读和调试**:下载的源码可以作为学习的实例,通过阅读和运行代码,理解每个步骤是如何实现的,有助于加深对Java网络和图形编程的理解。...

    基于java开发的货币汇率查询小程序

    - **SwingWorker**:对于Swing应用,可以使用SwingWorker来确保网络请求在后台执行。 6. **API接口**: - **外汇API**:如Open Exchange Rates、Exchange Rates API等,提供实时或历史汇率数据。 - **API调用**...

    ProcessBar 2种经典实现

    标题中的“ProgressBar 2种经典实现”指的是在编程中如何创建和使用进度条控件,通常在用户界面(UI)中显示任务执行的进度。在软件开发中,进度条是提高用户体验的重要元素,因为它可以向用户反馈程序正在执行的...

    浅析使用模型参数构造Java Swing组件.zip

    例如,使用setCellRenderer方法可以改变表格、列表或树中数据的显示方式;使用setPreferredSize可以调整组件的大小;使用setDefaultCloseOperation可以设置窗口关闭时的行为。 6. **布局管理**:Swing提供了多种...

    java swing界面开发的一个抓取快递接口工具

    1. 异步处理:为了防止因网络延迟导致界面冻结,查询操作通常在后台线程执行,使用SwingWorker或者CompletableFuture来实现。 2. 错误处理:对可能出现的网络异常、数据解析错误等进行捕获和处理,向用户提供友好的...

    Java表格组件在数据库的应用.zip

    例如,JTable 可以配合 SwingWorker 使用,实现后台加载数据,避免阻塞UI线程。 对于用户交互,表格组件提供了各种事件处理器,如MouseListener和KeyListener,用于响应用户的点击、拖动和键盘操作。这些事件可以...

Global site tag (gtag.js) - Google Analytics