只有在程序用java完成执行后才能看到swing输出
我正在为一些生物过程建立一个模拟器。我使用了一个包含大量元素的ArrayList。我在循环中调用了一些3-4函数(返回结果需要相当长的时间),这些函数操作和操作这个ArrayList。在每个循环的末尾,我都在jTable中显示了这个迭代的结果。我面临的问题是,在每个循环结束时,我应该看到添加了一行,但只有在程序完成执行后,我才能看到整个输出(即整个)
下面的代码有助于可视化我的代码的体系结构
ArrayList<String> s = new ArrayList<String>();
for(int i=1;i<=1000;i++){
process1(s);
process2(s);
.
.
.
processn(s);
displaySummaryOfArraylistInJTableForThisIteration(s);
}
# 1 楼答案
假设您每次都在
displaySummaryOfArraylistInJTableForThisIteration(s);
中设置新的表模型,您仍然必须为此进程使用线程,以便每次在表中设置信息时都可以显示信息,而不是在进程结束时,选中swing中的concurrency你在找这样的东西吗
首先,您需要定义一个实现
Runnable
的类,然后重写run方法,这样这个方法就可以执行所需的行为。我建议您将类声明为内部类,这样就可以利用类全局字段。之后,您将创建一个YourClass
的实例,另一个来自Thread
的实例,将实例从YourClass
发送到构造函数。最后,只需使用Thread
类中的start();
方法。要了解概念解释,您可以访问this# 2 楼答案
如果在Event Dispatch Thread中运行,那么gui将冻结,直到完成。 你可以用SwingWorker这里有一个我非常喜欢的例子Swing Worker Example
例如: