У меня есть графический интерфейс, который довольно тяжело построить / инициализировать на платформе, на которой он работает. Поэтому я хочу обновить прогресс, пока он инициализируется.
У меня есть небольшой недекорированный JDialog, содержащий JLabelи JProgressBar, который я хочу обновить в определенных местах во время инициализации, однако, так как theadatch thead 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();
}
});
}
перерисовки, вызванные вызовами к progressBar.setValue()
/ progressLabel.setText()
выше, будут, конечно, поставлены в очередь, пока EDT занят и приведут к перекрашиванию после того, как мывсе сделано вместо обновления по пути ..