Изменение курсора по умолчанию на занятый курсор не работает должным образом

После многих попыток сделатьJProgressBar Работая как положено, я наконец-то добился успеха в достижении своей цели. Я использовал@MadProgrammer«sсовет и использовалSwingWorker чтобы наконец заставить программу работать как я хочу.

Теперь я хочу, чтобы курсор изменился наBUSY_CURSOR http://telcontar.net/Misc/screeniecursors/Cursor%20hourglass%20white.png когда мойJProgressBar идет от 0% до 100%. Я погуглил и узнал, что

setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

код для этого Я пробовал, но это не работает, как ожидалось.

Соответствующий кусок кода:

JProgressBar progress;
JButton button;     
JDialog dialog;      //Fields of my GUI class

progress=new JProgressBar(JProgressBar.HORIZONTAL,0,100);
button=new JButton("Done");
dialog=new JDialog();             //Done from methods

progress.setValue(0);
progress.setStringPainted(true);
progress.setBorderPainted(true);  //Also done from methods

button.addActionListener(this);   //Also done from methods

dialog.setLayout(new FlowLayout(FlowLayout.CENTER));
dialog.setTitle("Please wait...");
dialog.setBounds(475,150,250,100);
dialog.setModal(true);            //Also done from methods

dialog.add(new JLabel("Loading..."));
dialog.add(progress);             //Also done from methods

И вотactionPerformed метод:

public void actionPerformed(ActionEvent e)
{
    setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

    Task task=new Task();
    task.addPropertyChangeListener(this);
    task.execute();
    dialog.setVisible(true);
}

propertyChange метод:

public void propertyChange(PropertyChangeEvent evt) {
    if("progress" == evt.getPropertyName()){
        int progressnum = (Integer) evt.getNewValue();
        progress.setValue(progressnum);
    }
}

и вложенный классTask:

   class Task extends SwingWorker<Void, Void> {
        /*
         * Main task. Executed in background thread.
         */
        @Override
        public Void doInBackground() {
            int progressnum = 0;
            setProgress(0);

            while (progressnum < 100) {
                try {
                    Thread.sleep(10);
                } catch (InterruptedException ex) {
                    System.err.println("An error occured:"+ex);
                    ex.printStackTrace();
                }

                progressnum ++;
                setProgress(Math.min(progressnum, 100));
            }
            return null;
        }

        /*
         * Executed in event dispatching thread
         */
        @Override
        public void done() {
            //setCursor(null); //turn off the wait cursor
            setCursor(Cursor.getDefaultCursor()); //Is this one or the one above it right?
            dialog.dispose();
            progress.setValue(progress.getMinimum());
        }
    }

Когда я нажимаюbutton, JDialog с JProgressBar появляется, и JProgressBar идет от 0% до 100%. В течение этого времени курсор должен быть изменен наBUSY_CURSOR http://telcontar.net/Misc/screeniecursors/Cursor%20hourglass%20white.png(занятый курсор) и когда JProgressBar достигает 100%, нормальный курсор (NORMAL_CURSOR http://fc05.deviantart.net/fs70/i/2011/008/1/4/mouse_cursor_windows_by_mikima-d36oslj.png) должен быть восстановлен.

Проблема в том, когда я нажимаюbutton, курсор меняется на занятый курсор в течение доли секунды, а затем возвращается в исходный курсор. Я хочу, чтобы курсор был занят, пока JProgressBar не достигнет 100%.

Я добавил код для преобразования курсора в занятый курсор вactionPerformed метод и восстановить нормальный курсор вdone метод вложенного классаTask, Обратите внимание, что я также включил необходимые пакеты.

В чем причина проблемы?Как мне это исправить?

Должен ли я использовать

setCursor(null);

или же

setCursor(Cursor.getDefaultCursor());

восстановить курсор?

Ответы на вопрос(2)

Ваш ответ на вопрос