2013-08-26 34 views
2

我正在爲某些生物過程構建模擬器。我使用了一個包含大量元素的ArrayList。我在循環中調用了3-4個函數(這需要相當長的時間來返回結果),這些函數操作和操作此ArrayList。在每個循環結束時,我已經在jTable中顯示了這個迭代的結果。我面臨的問題是,在每個循環結束時,我應該看到一行被添加,但是隻有在程序執行完畢後才能看到整個輸出(即Whole)。僅在程序在java中執行完畢後才能看到輸出

下面的代碼有助於可視化我的代碼的架構

ArrayList<String> s = new ArrayList<String>(); 
for(int i=1;i<=1000;i++){ 
process1(s); 
process2(s); 
. 
. 
. 
processn(s); 
displaySummaryOfArraylistInJTableForThisIteration(s); 
} 
+0

是否使用線程? –

+0

你能解釋或顯示什麼是「displaySummaryOfArraylistInJTableForThisIteration(s);」 (在功能方面,我也認爲你遇到併發問題 – Nivde

+0

我沒有線程的概念,請給我一些教程的鏈接,這樣我就可以理解線程並解決這個問題 – sukrit

回答

1

假設你在設置新的表格模型每次在displaySummaryOfArraylistInJTableForThisIteration(s);還是要使用線程這個過程使信息可以顯示每一次當你設置在表中的信息,而不是在過程結束時,檢查concurrency在擺動

所以,你喜歡這個

private class YourTask implements Runnable { 

    @Override 
    public void run() { 
     // refresh the table data 

    } 
} 

YourTask task = new YourTask(); 
     Thread newThread = new Thread(task); 
     newThread.start(); 
尋找的東西

首先,您需要定義一個實現Runnable的類,並且您將重寫run方法,以便此方法可以執行所需的行爲,我建議您將類聲明爲內部類,以便可以利用類全局字段。之後,您將創建YourClass的實例,並從Thread創建另一個實例,將實例從YourClass發送到構造函數。最後只需使用Thread類中的start();方法即可。對於概念性解釋,您可以訪問this

+1

displaySummaryOfArraylistInJTableForThisIteration(s);調用以下方法:: DefaultTableModel model = DefaultTableModel)simulationStatisticsTable.getModel(); model.addRow(new Object [] {time,(SimulationStatistics.a + SimulationStatistics.b),SimulationStatistics.c}); – sukrit

+0

是的,這可能是OP在Event Dispatch線程上做的工作。 –

+0

再次檢查我的答案@ user2718320 – Nivde

1

如果你運行在Event Dispatch Thread那麼gui會凍結直到完成。 您可以使用SwingWorker這裏是一個例子,我真的很喜歡Swing Worker Example

例子:

class Worker extends SwingWorker<Void, String> { 

    @Override 
    protected void doInBackground() throws Exception { 
     //here you make process the mail 
     String partialResults= process1(); 
     publish(partialResults); 
     String partialResults= process2(); 
     publish(partialResults); 
     . 
     . 


    } 

    @Override 
    protected void process(List<String> chunks) { 
        //this is executed in the EDT 
     addToJTable(chunks); 
    } 
} 
相關問題