У меня есть некоторые проблемы с компонентом JDialog.
1 - DialogWait расширяет JDialog и определяет неопределенный JProgressBar. Кажется, что случайно индикатор выполнения не появляется, и диалоговое окно кажется сбойным (никакое действие не выполнено, нет возможности закрыть его, если я нажимаю на X).
Увидеть:
2- Опять же, иногда, диалоговое окно не исчезает, когда я вызываю dispose (). Кажется, он застрял непосредственно перед методом dispose () (я проверил с некоторыми отпечатками на консоли). Эффект состоит в том, что приложение не запускается и не выходит из компьютера.
DialogWait dialogWindow = new DialogWait();
SwingWorker<Void, Void> swingWorker = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
while(newTimeSet != _record.getCurrentTimeMs()) {
_record.stepForward();
if(valuesMap.get(varName).equals(value))
valuesMap.put(varName, value);
}
dialogWindow.close();
return null;
}
};
swingWorker.execute();
dialogWindow.makeWait("Loading");
Класс DialogWait:
public class DialogWait extends JDialog{
private JDialog dialog;
private JProgressBar progressBar;
public void makeWait(String msg) {
dialog = new JDialog(Gui.getMainFrame(), msg, JDialog.ModalityType.APPLICATION_MODAL);
progressBar = new JProgressBar();
progressBar.setIndeterminate(true);
JPanel panel = new JPanel(new BorderLayout());
panel.add(progressBar, BorderLayout.CENTER);
panel.add(new JLabel("Wait..."), BorderLayout.PAGE_START);
dialog.add(panel);
dialog.pack();
dialog.setPreferredSize(Gui.getMainFrame().getSize());
dialog.setLocationRelativeTo(Gui.getMainFrame());
dialog.setVisible(true);
}
public void close() {
dialog.dispose();
}
Я запутался, потому что проблемы, похоже, не возникают в определенных ситуациях.