如何在jtable中添加系统命令结果?

时间:2016-04-29 16:16:53

标签: java swing jtable

我尝试了太多方法,但我没能成功 我将运行一个系统命令,我将把结果放在一个缓冲读取器中并读取每一行并将其放在一个向量中并将其放入一行并清除该向量以重复使用它但它不起作用我不会&#39不知道为什么请帮忙

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

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();
        }
    }
}

1 个答案:

答案 0 :(得分:2)

  

并将其放在一个向量中并将其放入一行并清除该向量以重复使用它但它不起作用我不知道为什么

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

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

running_process ob = new running_process();

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

阅读Concurrency上Swing教程中的部分,详细了解EDT示例的SwingWorker和工作代码。