我尝试了太多方法,但未能成功
我将运行系统命令,并将结果放入bufferedreader中并读取每一行,并将其放入向量中,并将其放在一行中,然后清除向量以重复使用它,但是它不起作用,我不知道为什么请帮忙

这是我的代码,但是崩溃了,我不知道为什么

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    try {
        DefaultTableModel model = (DefaultTableModel)jTable1.getModel();
        Vector<Object> row = new Vector();
        running_process ob = new running_process();
        BufferedReader stdInput ;
        String s;
        stdInput= ob.all_running_ps();
        while ((s = stdInput.readLine()) != null) {
            row.add(s);
            model.addRow(row);
            row.clear();
        }
    }
}

最佳答案

并将其放在向量中并排成一行,然后清除向量以重复使用它,但是它不起作用我不知道为什么


您无法清除Vector。您需要为要添加到表中的每一行数据创建一个新的Vector:

while ((s = stdInput.readLine()) != null) {
    Vector<Object> row = new Vector<Object>();
    row.add(s);
    model.addRow(row);
}



  running_process ob =新的running_process();


另外,我认为您不应该从侦听器运行外部进程。此过程可能会阻止并阻止EDT对事件做出响应。您可能应该将代码移至SwingWorker,然后在数据可用时将其“发布”到表中。

阅读Swing教程中关于Concurrency的部分,以获取有关EDTSwingWorker示例的工作代码的更多信息。

09-27 02:24