2017-01-03 11 views
1

Здравствуйте я столкнулся несколько проблемы в сочетании JTextArea с JProgressBar. JtextArea показывает консоль сценария пакетного запуска. вот мой код: -Присоединение JProgressBar и JTextArea (партия запуска консоли) в Затмении

private void initialize() { 
     frmPdfPublisher = new JFrame(); 
     frmPdfPublisher.setIconImage(new ImageIcon("C:\\Users\\Admin\\Desktop\\imageedit_1_6449501097.png").getImage()); 
     frmPdfPublisher.setTitle("PDF Publisher"); 
     frmPdfPublisher.setBounds(100, 100, 483, 540); 
     frmPdfPublisher.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frmPdfPublisher.getContentPane().setLayout(null); 


     TextArea textArea = new TextArea(); 
     textArea.setBounds(10, 280, 447, 146); 
     frmPdfPublisher.getContentPane().add(textArea); 
     textArea.setEditable(false); 


     ScrollPane scrollPane = new ScrollPane(); 
     scrollPane.setBounds(10, 280, 447, 146); 
     frmPdfPublisher.getContentPane().add(scrollPane); 


     JProgressBar progressBar = new JProgressBar(); 
     progressBar.setBounds(10, 254, 447, 14); 
     frmPdfPublisher.getContentPane().add(progressBar); 
     progressBar.setVisible(true); 



     JButton btnTransform = new JButton("Transform"); 
     btnTransform.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       try { 
       String cmds[] = {"C:\\Users/Admin/Desktop/test1.bat"}; 
       Runtime runtime = Runtime.getRuntime(); 
       Process process = runtime.exec(cmds); 
       process.getOutputStream().close(); 
       java.io.InputStream inputStream = process.getInputStream() ; 
       InputStreamReader inputstreamreader = new InputStreamReader(inputStream); 
       BufferedReader bufferedrReader = new BufferedReader(inputstreamreader); 
       String strLine = ""; 
       while ((strLine = bufferedrReader.readLine()) != null) { 
        System.out.println(strLine); 
        String newline = "\n"; 
        textArea.append(strLine+newline); 
        textArea.setCaretPosition(textArea.SCROLLBARS_VERTICAL_ONLY); 
        progressBar.setString(strLine); 



      } 
      } catch (IOException IoException) { 
       IoException.printStackTrace(); 
      } 
      } 

     }); 

Я хочу показать запущенный скрипт в JprogressBar. Я использую Eclipse, Neon.2

EDIT: -

Я добавил несколько шагов, но он не показывает совершенную загрузку и получение завершается, как только консоль будет остановлена.

Вот отредактированный код: -

JButton btnTransform = new JButton("Transform"); 
     btnTransform.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 

       try { 
       String cmds[] = {"C:\\Users/Admin/Desktop/test1.bat"}; 
       Runtime runtime = Runtime.getRuntime(); 
       Process process = runtime.exec(cmds); 
       process.getOutputStream().close(); 
       java.io.InputStream inputStream = process.getInputStream() ; 
       InputStreamReader inputstreamreader = new InputStreamReader(inputStream); 
       BufferedReader bufferedrReader = new BufferedReader(inputstreamreader); 
       String strLine = ""; 
       int n=progressBar.getValue(); 
       if(n<100){ 
        n++; 
        progressBar.setValue(100); 
       } 
       else{ 
        timer.cancel(); 
       } 
       while ((strLine = bufferedrReader.readLine()) != null) { 
        System.out.println(strLine); 
        String newline = "\n"; 
        textArea.append(strLine+newline); 
        textArea.setCaretPosition(textArea.SCROLLBARS_VERTICAL_ONLY); 
        progressBar.setStringPainted(true); 
        progressBar.dispatchEvent(e); 
        progressBar.getValue(); 
        progressBar.updateUI(); 

      } 
      } catch (IOException IoException) { 
       IoException.printStackTrace(); 
      } 
      } 

Пожалуйста, исправить меня, что мне не хватает?

+0

не забывайте принимать ответ, когда у вас есть то, что вы искали. – AxelH

ответ

1

Прямо сейчас, ваш звонок exec() блокирует поток отправки событий. Вам нужно будет запустить команды в background, как они показывают here. Если вы хотите просмотреть ход каждой строки в пакетном файле по мере ее запуска, вам нужно будет прочитать пакетный файл по очереди, выполнить каждую строку отдельно и publish() результат, как показано на рисунке here. Если вы вызываете setProgress() после каждой строки в фоновом режиме, индикатор выполнения должен обновляться, как показано на рисунке here.

Я хочу, чтобы мой индикатор выполнения работал в соответствии с процессом выполнения командного файла и n завершение 100%.

Вам нужно прочитать все линии, чтобы узнать, сколько есть. После этого вы можете установить прогресс, как они показывают here:

setProgress(i * (100/n)); 

где i является номер текущей строки выполняется и n общее число строк. Например, если есть десять строк, индикатор выполнения будет расти на одну десятую после каждого вызова.

+0

Я могу показать консоль в своем текстовом поле, и теперь я просто хочу прочитать эту консоль во время работы и одновременно показать ее на панели прогресса. –

+0

Я не думаю, что таймер будет работать для этого; каждый шаг в пакетном файле может занимать другое время. –

+0

Он работает над угловым, hta-javascript, но у меня нет идеи в java для чтения партии –