2013-02-28 2 views
1

У меня есть Jbutton «Highlight», который при нажатии вызывает панель Jprogress. Прогресс работает отлично до 100%.Показать результат только после того, как панель JProgress завершена на 100% в Java

Как показать свой результат только после того, как индикатор выполнения достиг 100%.

Вот часть кода:

final JProgressBar progressBar = new JProgressBar(); 
progressBar.setMaximum(100); 
progressBar.setStringPainted(true); 


btnNewButton_2.addActionListener(new ActionListener() { 


     public void actionPerformed(ActionEvent e) { 


       Thread t = new Thread(new Runnable() { 
        public void run() { 
        int i = 1; 
        progressBar.setMinimum(0); 
        progressBar.setMaximum(100); 
        try { 
         while (i <= 100 || true) { 
          progressBar.setValue(i); 
          i++; 
          Thread.sleep(38); 

         } 
        } catch (InterruptedException ex){} 

      }}); 
      t.start(); 

// Где я должен поставить System.out.println ("Jprogress Bar Достигнута 100%) ??

ответ

1

Добавить, если заявление после того, как я ++ :)

i++; 
    if (i == 100) { 
    displayResult(); 
    return; 
    } 

не забудьте использовать invokeAndWait. текущий код, скорее всего, не будет работать хорошо, как вы манипулируете управления GUI с изнаночной нити.

+0

Я не понимаю, почему существует необходимость в invokeAndWait здесь ... Все дело в том, что вы не хотите, чтобы ваш графический интерфейс (зависание) зависал, пока работает фоновый поток. Нам не нужно беспокоиться о том, что происходит в очереди событий AWT. Важно помнить, что нужно запускать GUI-события в потоке AWT, но вам разрешено вызывать получатели и сеттеры для компонентов GUI из любого потока. – RudolphEst

+0

Спасибо Спасибо за работу :) –

+1

@RudolphEst Не должно быть никаких изменений компонентов GUI из другого потока (что и происходит в примере). – sdasdadas

0
try{ 
    while (i <= 100 || true) { 
     progressBar.setValue(i); 
     i++; 
     Thread.sleep(38); 
    } 
    // progress is definitely at 100 now 
    // do whatever you need to display result here -- it would be faster than doing the check 
    // if(i==100) in every execution inside the while loop. 
    System.out.println("Progress is done!!!"); 
} catch (....