Обновление JProgressBar не работает - PullRequest
1 голос
/ 11 января 2012

У меня есть некоторый код, который перемещает файлы и хотел бы внедрить индикатор прогресса во время копирования файлов, но у меня возникают проблемы с обновлением индикатора выполнения - он просто остается на 0. Вот соответствующий код в вопросе:

            public class SomeClass extends JFrame implements ActionListener
            {
                private static SomeClass myprogram = new SomeClass();
                private JProgressBar progressBar = new JProgressBar();

                public static void main(String[] args)
                {
                    javax.swing.SwingUtilities.invokeLater(new Runnable() {
                        public void run()
                        {
                            myprogram.initGUI();
                        }
                    });
                }

                private void initGUI()
                {
                    JButton button1 = new JButton("Another Button");
                    JButton button2 = new JButton("Copy");
                    // other GUI Code
                }

                @Override
                public void actionPerformed(ActionEvent e)
                {       
                    JButton button = (JButton) e.getSource();
                    String text = button.getText();

                    if (text.equalsIgnoreCase("Copy"))
                    {           
                        copyFiles();
                    }
                    else
                    {           
                        doSomethingElse();
                    }
                }

                public void copyFiles()
                {       
                    for (int i = 0; i < someNumber; i++)
                    {
                        //Code to copy files
                        progressBar.setValue((i * 100) / someNumber);
                    }

                }
            }

Нужно ли использовать SwingWorker для правильной работы? Спасибо за любую помощь.

Ответы [ 3 ]

4 голосов
/ 11 января 2012

Чтобы ответить на ваш вопрос о том, почему ваш индикатор выполнения не обновляется:

Ваш JProgressBar не обновляется, потому что вы блокируете Поток отправки событий (EDT) в вашем методе copyFiles () .

Вы никогда не должны блокировать EDT с помощью длительной операции.

Что происходит, когда actionPerformed обратный вызов вызывается из EDT, поэтому вы также вызываете copyFiles () из EDT.

Вы должны запустить copyFiles из другого потока.

Нужно ли использовать SwingWorker для правильной работы?

SwingWorker, действительно, будет одним из способов запуска copyFiles () код снаружи EDT.

3 голосов
/ 11 января 2012

Я бы использовал ProgressMonitor. Вот пример использования.

0 голосов
/ 20 марта 2012

ВАШ ответ:

progressBar.update(progressBar.getGraphics());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...