Java 使用“将行添加到JTable”;“实时感受”;

Java 使用“将行添加到JTable”;“实时感受”;,java,multithreading,swing,jtable,Java,Multithreading,Swing,Jtable,我想让“实时感”变得更容易。我用JTable制作了GUI,然后有一个名为START的按钮。当我单击此按钮时,程序将调用下面的start()方法。(这只是一个例子)。添加行没有问题,它工作得很好。但问题是,行只在一次出现在Jtable中。(可能是程序finish start()方法,所有行一起出现。)在我的start()方法中还有1000条语句。这不是即时的感觉。我应该等到启动方法完成。然后一次添加1000行 void start(){ int a = 3+3; addRo

我想让“实时感”变得更容易。我用JTable制作了GUI,然后有一个名为START的按钮。当我单击此按钮时,程序将调用下面的start()方法。(这只是一个例子)。添加行没有问题,它工作得很好。但问题是,行只在一次出现在Jtable中。(可能是程序finish start()方法,所有行一起出现。)在我的start()方法中还有1000条语句。这不是即时的感觉。我应该等到启动方法完成。然后一次添加1000行

void start(){    
    int a = 3+3;
    addRow(new String[]{"a is 6"})   
    int b = 4+4;
    addRow(new String[]{"b is 8 "})
} 
我要做的只是“实时感受”,我希望看到一行一行地添加,而不是一次添加。你能理解我的目的吗?想象一下“小提琴手”程序。你很容易理解。有人能帮我吗?我应该做一根线吗


感谢阅读,并为ackward表达(英语不是我的语言)感到抱歉。

使用基于Swing的
计时器。在
actionPerformed(..)
中添加一条新记录。有关详细信息,请参阅。

这是因为Swing线程的工作方式。只有一个线程处理所有渲染、更新等操作。您对start()方法的处理正在该渲染线程中进行,因此GUI上的任何其他线程都不会响应,直到您从该方法返回为止

您需要做的是使用
SwingWorker
ThreadPoolExecutor
并将处理转移到另一个线程。然后,随着处理的继续,可以定期更新GUI


注意,通过这样做,人们可能会多次单击该按钮,并在第一个按钮完成之前再次调用
start()
。您将需要考虑和处理该情况——例如,禁用按钮直到第一个按钮完成。

在Swing中有一个线程称为EDT(事件调度器线程),它负责GUI像实时用户FRIENDLY应用程序的行为。如果您使用长时间运行的方法干预EDT,您将冻结应用程序GUI。您必须在后台执行长时间运行的任务(在与EDT不同的线程中)。您可以使用
javax.swing.SwingWorker
javax.swing.Timer