【发布时间】:2012-04-07 10:25:30
【问题描述】:
我在 NetBeans 中创建了一个 JDialog 和一个自定义构造函数,如下所示:
public AnimatedProgress(java.awt.Frame parent, boolean modal, JTable table) {
super(parent, modal);
initComponents();
setLocationRelativeTo(parent);
progressLabel.setText("Collecting Table Data. . .");
Object[][] data = getJTableData(table); // Simple method to collect data and store in Object[][] array
progressLabel.setText("Processing Data. . .");
processData(data);
progressLabel.setText("Data Processed. . .");
}
现在我将这个JDialog 称为:
new AnimatedProgress(this, true, dataTable).setVisible(True);
我的问题是,当 Java 调用构造函数时,构造函数中的所有代码都会先执行,然后出现对话框并显示最终结果。
如何让我的JDialog先出现再处理方法:getTableData()和processData()??
【问题讨论】:
-
不要阻塞 EDT(事件调度线程)——当这种情况发生时,GUI 将“冻结”。而不是调用
Thread.sleep(n)实现一个SwingTimer用于重复任务或SwingWorker用于长时间运行的任务。有关详细信息,请参阅Concurrency in Swing。 -
@AndrewThompson -- 是的,这实际上是主要问题。好吧,我知道
swing.Timer,但是只有两个绝对不会重复的过程,而且,我不知道如何在这里申请SwingWorker。 . .你能用SwingWorker代码回答这个问题吗? -
@Asif:请不要索要代码——这取决于你自己的创作。为什么不查看 Andrew Thompson 链接的教程并尝试创建自己的代码。然后,如果您遇到困难,请在此处发布您的尝试。
-
好的,我会去的。 . .谢谢你:)
-
@Andrew Thompson 是对的。最好的解决方案是使用
SwingWorker。请参阅我的答案,其中显示了使用SwingWorker的示例。
标签: java swing jdialog swingworker