Jes*_*sen 5 java swing event-dispatch-thread background-thread
我有一个GUI,它在运行它的平台上构建/初始化非常繁重.因此我想在初始化时更新进度..
我有一个小的未修饰的JDialog包含一个JLabel和一个JProgressBar,我想在初始化期间在特定的地方更新,但是,因为事件调度thead(根据Swing规则)用于构建/初始化GUI,进展当然是直到EDT再次空闲(即初始化完成)才更新..
JProgressBar我已经使用"paintImmediately"重绘了,但我似乎无法让它适用于JLabel和对话框本身..是否有任何简单的推荐/证明方法来实现这一目标?
干杯...
编辑:添加一个我正在尝试做的例子; 当然,大大简化了.
private JLabel progressLabel;
private JProgressBar progressBar;
public static int main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
showProgressDialog();
progressLabel.setText("construct 1");
constructSomeHeavyGUI();
progressLabel.setText("construct 2");
progressBar.setValue(33);
constructSomeMoreHeavyGUI();
progressLabel.setText("construct 3");
progressBar.setValue(67);
constructEvenMoreHeavyGUI();
progressLabel.setText("done");
progressBar.setValue(100);
hideProgressDialog();
showHeavyGUI();
}
});
}
Run Code Online (Sandbox Code Playgroud)
只要EDT忙碌,并且在我们全部完成而不是一路更新之后,由progressBar.setValue()/ progressLabel.setText()上面的呼叫引起的重新绘制当然会排队等待.
| 归档时间: |
|
| 查看次数: |
5616 次 |
| 最近记录: |