2014-01-05 2 views
0

Я делаю приложение, которое берет данные из API, но требуется некоторое время (например, 1 или 2 секунды), я хочу использовать JProgressBar, чтобы показать, сколько данных загружено, здесь мой код:Использование JProgressBar в Java

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
     String snum; 
     try 
     { 
      curfrom=(String)fromList.getSelectedItem(); 
      curto=(String)toList.getSelectedItem(); 
      snum=curval.getText(); 
      address="http://rate-exchange.appspot.com/currency?from="+curfrom+"&to="+curto+"&q="+snum; 
      url=new URL(address); 
      connect=url.openConnection(); 
      br=new BufferedReader(new InputStreamReader(connect.getInputStream())); 
      output=br.readLine(); 
      String[] split = output.split("\""); 
      res=split[12]; 
      res=res.replace(" ", ""); 
      res=res.replace(":", ""); 
      res=res.replace("}", ""); 
      result.setText(snum+" "+curfrom+" = "+res+" "+curto); 
     } 
     catch(Exception e) 
     { 
      result.setText("Error! Please check the Problem(e.g. Net)"); 
      JOptionPane.showMessageDialog(null, "An Error has Occured!", "Error!", JOptionPane.ERROR_MESSAGE); 
     } 
    } 

Я думал сделать прогресс бар, который будет загружать и показывать ему значение с помощью JProgressBar.setStringPainted(true), но когда я обновляю его помощью for петли, как:

for(i=0;i<=100;i+=10) 
{ 
    bar.setValue(i); 
    try 
    { 
     Thread.sleep(100); 
    } 
    catch (InterruptedException ex) 
    { 
     Logger.getLogger(MainApp.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

но когда я запускаю это код, и он начинает загружаться, он появляется на 100 миллисекунд, а затем loa ds, я не вижу анимацию, которая, как мне кажется, должна отображаться этим кодом. Я хочу увидеть анимацию.

Заранее спасибо.

+3

Не вызывайте Thread.sleep. Используйте ['SwingWorker'] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html) –

+3

Во-первых, взгляните на [Параллелизм в Swing] (http://docs.oracle .com/javase/tutorial/uiswing/concurrency /), в частности [Worker Threas и SwingWorker] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html) и [это] (http : //stackoverflow.com/questions/20739488/swingworker-in-multithreaded-jframes/20739571#20739571) для примера – MadProgrammer

ответ

1

Бросьте его и используйте javax.swing.ProgressMonitorInputStream, обернутый вокруг входного потока соединения.

 Смежные вопросы

  • Нет связанных вопросов^_^