2016-04-29 40 views
0

我嘗試了太多方法,但未能成功 我將運行一個系統命令,並將結果放入一個bufferedreader並讀取每一行,並將其放入一個向量中並將其放入一行中,並清除向量重複使用它,但它不工作,我不知道爲什麼,請幫助如何在jtable中添加系統命令的結果?

這是我的代碼,但它崩潰,我不知道爲什麼

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

回答

2

,並把它放在一個載體把它放在一行,並清除矢量重用它,但它不起作用我不知道爲什麼

您無法清除矢量。您需要創建數據的每一行要添加到表的新載體:

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

running_process OB =新running_process();

此外,我不認爲你應該從偵聽器運行一個外部進程。這個過程可能會阻止和防止EDT響應事件。您應該將代碼移至SwingWorker,並在數據可用時將數據「發佈」到該表。

有關EDTSwingWorker示例的工作代碼的更多信息,請參閱Swing教程Concurrency中的部分。

+0

非常感謝它,當我每行創建一個新的向量:) –