2016-04-29 4 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に移動し、利用可能になったときにデータをテーブルに「公開」するべきです。

EDTと作業コードSwingWorkerの例については、ConcurrencyのSwingチュートリアルのセクションを参照してください。

+0

ありがとう、私は新しいベクトルをすべての行を作成するときに動作します:) –