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