首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有在java中程序执行完毕后才能看到输出。

只有在java中程序执行完毕后才能看到输出。
EN

Stack Overflow用户
提问于 2013-08-26 22:06:07
回答 2查看 127关注 0票数 2

我正在为一些生物过程建立一个模拟器。我使用了一个包含大量元素的ArrayList。我已经在循环中调用了一些3-4个函数(返回结果需要相当长的时间),它们操作和操作这个ArrayList。在每个循环的末尾,我在jTable中显示了这次迭代的结果。我面临的问题是,在每个循环的末尾,我应该看到添加了一行,但只有在程序完成执行后,我才能看到整个输出(即整个输出)。

以下代码有助于可视化我的代码的体系结构

代码语言:javascript
复制
ArrayList<String> s = new ArrayList<String>();
for(int i=1;i<=1000;i++){
process1(s);
process2(s);
.
.
.
processn(s);
displaySummaryOfArraylistInJTableForThisIteration(s);
}
EN

回答 2

Stack Overflow用户

发布于 2013-08-26 22:11:08

假设您每次都在displaySummaryOfArraylistInJTableForThisIteration(s);中设置新的表模型,您仍然需要为此进程使用线程,以便每次在表中设置信息时都可以显示信息,而不是在进程结束时显示信息,请在swing中选中concurrency

所以你要找的东西是这样的

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-08-26 22:23:01

如果你在Event Dispatch Thread中运行,那么图形用户界面将会冻结,直到完成。你可以在这里使用SwingWorker,这是一个我非常喜欢Swing Worker Example的例子

示例:

代码语言:javascript
复制
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);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18446112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档