2

Я хотел бы создать приложение, которое устанавливает файлы на устройствах. но у меня есть проблема для реализации прогресса, код, который я использую в своем фрейме для вызова класса для установки, приведен ниже, execShellCmd - это метод, который вызывается для установки на все устройства. value - статическое значение, полученное классом Install. я хотел бы реализовать индикатор прогресса, установленный для установки и значения, чтобы обеспечить прогрессирование установки.Как сделать прогрессирование прогрессивной развертки?

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { 
    Thread t; 
     t = new Thread(){ 
     private int postion; 
    public void run(){ 
     Install install = new Install(); 
     int position = 0; 
     String fileName = directory; 
     String shellCommand = fileName; 

     // for (int position =0; postion < 105;position +5) { 
       jProgressBar1.setValue(Install.value); 
       try { 
         Thread.sleep(500); 
       } catch (InterruptedException e) { 
       } 
       position += 5; 
     //} 
     install.execShellCmd(shellCommand); 
     //jTextArea1.setText(error.err.toString()); 
     } 

     }; 
     t.start(); 
    } 
+1

The [бар учебник прогресса] (HTTP: //docs.oracle.com/javase/tutorial/uiswing/components/progress.html) было бы хорошим местом для запуска – Robin

+0

. Я начал с tuto, но не проблема создания метода цикла; для продвижения панели, но как относить панель к методу установки, который выполняет скрипт. или если я использую неопределенный режим, как остановить анимацию – user2043602

+0

Не обновляйте компоненты пользовательского интерфейса вне контекста EDT. Используйте SwingWorker вместо потока – MadProgrammer

ответ

2

Как показано here, вы можете использовать ProcessBuilder, чтобы выполнить сценарий. Разберите объединенные потоки, полученные от getInputStream(), чтобы оценить фактический прогресс сценария. Используйте эту информацию для определения вашего JProgresBar. Чтобы сохранить жизнеспособность в графическом интерфейсе, сделайте это в doInBackground() методе SwingWorker, из которого вы можете вызвать setProgress().

+0

, это то, что я делаю в классе Install, и число строк, полученных в результате моего скрипта, дается значением статической переменной – user2043602

+0

, потому что, когда я вызываю это значение, я буду иметь juste последнее значение в конце выполнения – user2043602

+0

Правильно, одно значение не очень полезно; вам нужно проанализировать поток сценария 'stdout'. Это ваш сценарий? Можете ли вы включить что-то вроде подробного режима? Изменить: обновите свой вопрос, чтобы отразить ваш подход. – trashgod

1

Хм .. Говорят, что этот подход нити не подходит для JProgressBar. Вместо этого перейдите с Timer. У меня была такая же проблема, когда я связывался с JProgressBar, внутри потоков. Используйте следующую ссылку для получения дополнительной информации, он работает пример, а

http://www.coderanch.com/t/566728/GUI/java/JProgressBar-Napkin-feel-working

И да, посмотрите на мой ответ в следующем

What is the ways updating jProgressBar?