Распоряжаться и проблемы JProgress Bar на JDialog - PullRequest
0 голосов
/ 26 июня 2019

У меня есть некоторые проблемы с компонентом JDialog.

1 - DialogWait расширяет JDialog и определяет неопределенный JProgressBar. Кажется, что случайно индикатор выполнения не появляется, и диалоговое окно кажется сбойным (никакое действие не выполнено, нет возможности закрыть его, если я нажимаю на X). Увидеть: enter image description here

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();       
   }

Я запутался, потому что проблемы, похоже, не возникают в определенных ситуациях.

...