2013-08-26 23 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); 
    } 
} 
相关问题