2013-12-18 1 views
3

Я пытаюсь загрузить несколько файлов по сети. при загрузке это займет неопределенное время. поэтому вы хотите отображать неопределенную jprogressbar во время загрузки. Однако проблема заключается в том, что моя jprogressbar и загрузка не работают одновременно. Я попробовал загрузку в отдельном потоке, сохраняя jprogressbar в EDT. Я попробовал несколько разных способов. некоторые из них: 1) реализованный Runnable и в run() Я загрузил файл. В это время прогресс был в EDT. (не работал.) 2) имел два отдельных потока и помещал как загрузку, так и обработку progressbar в каждом. (не работает). код для этого:Jprogressbar не работает

Thread oThread = new Thread(new Runnable() { 

    @Override 
    public void run() 
    { 
     progressBar.setIndeterminate(true); 
     progressBar.setVisible(true); 
     progressBar.validate(); 

    } 
}); 

Thread oThread1 = new Thread(new Runnable() 
{ 

    @Override 
    public void run() { 
     logger.info("Upload result from ***: "+ newport.upload(textbyte, wavbyte,xmlbyte, filename)); 

     } 
    }); 

3), то я переписал всю вещь и попробовал другой подход, используя Исполнитель, как это:

executor.execute(new Runnable() { 
    @Override 
    public void run() { 
      upload actions 

      SwingUtilities.invokeLater(new Runnable() { 
       progBar.setVisible(false); 
      }); 
    }}); 

, но ни один из этих методов не работал. Я новичок в этом, и мне интересно, нужно ли все это сделать, чтобы отобразить jprogressbar (неопределенный). Я хотел бы знать, есть ли более простой и простой способ сделать это.

+0

Пробовали ли вы примеры из Swing-учебник по 'Как использовать Прогресс Bars'? – camickr

+0

@camickr почти все из них. теперь, когда я ищу проблемы jprogressbar, все веб-сайты, возвращаемые google, отображаются в виде посещенных ссылок. –

+0

Это не отвечает на мой вопрос. Учебник Swing имеет рабочий пример. Почему, по вашему мнению, любой пример, который мы публикуем здесь, будет отличаться от примера, найденного в учебнике? Вы не задали конкретный вопрос о коде, который вы считаете запутанным в учебнике. – camickr

ответ

1

Вы фактически не устанавливая значение индикатора выполнения в любой момент код, который вы опубликовали.

Кроме того, это выглядит как хороший случай для использования SwingWorker, он будет выполнять работу над другим потоком, а затем перезвонит вам с прогрессом. Хорошо, что эти обратные вызовы уже происходят в потоке Swing.

Этот SwingWorker пример даже включает в себя установку индикатора выполнения:

http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html

+0

SwingWorker - новое и хорошее направление, в которое меня отправили. –

1

вы должны использовать SetValue() для изменения ProgressBar ниже пример кода для работы с jporgressbar

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JProgressBar; 

public class Tets { 

    public static void main(String [] args) { 
     JFrame frame =new JFrame(); 
     JPanel panel=new JPanel(); 

     JProgressBar bar=new JProgressBar(); 
     bar.setMaximum(100); 
     bar.setMinimum(0); 
     panel.add(bar); 


     frame.getContentPane().add(panel); 
     frame.pack(); 
     frame.setVisible(true); 

     for(int i=0;i<100;i++){ 
      bar.setValue(i); 
      try { 
       Thread.sleep(100); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     } 
    } 

} 

удачи

+0

Я работаю над неопределенным jprogressbar. действительно ли нам нужно установить значение для этого? –

+0

Ваш прогресс не является неопределенным. Посмотрите на свой код: progBar.setIndeterminate (false); – Markus

+0

где вы начинаете oThread1? –