2014-01-05 5 views
0

API에서 데이터를 가져 오는 앱을 만들고 있지만 시간이 오래 걸립니다 (1 ~ 2 초 정도 소요됩니다), JProgressBar를 사용하여 얼마나 많은 데이터가 다운로드되었는지 보여주고 싶습니다. 내 코드 :Java에서 JProgressBar 사용

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 밀리 초 동안 멈춘 것처럼 보입니다. ds, 나는이 코드에 의해 보여 져야한다고 생각하는 애니메이션을 볼 수 없다. 나는 애니메이션을보고 싶다.

미리 감사드립니다.

+3

Thread.sleep을 호출하지 마십시오. ['SwingWorker'] 사용 (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html) –

+3

먼저 [Concurrency in Swing] (http://docs.oracle.com)을 살펴보십시오. .com/javase/tutorial/uiswing/concurrency /), 특히 [Worker Threas and SwingWorker] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html) 및 [this] (http : //stackoverflow.com/questions/20739488/swingworker-in-multithreaded-jframes/20739571#20739571) 예를 들어 – MadProgrammer

답변

1

멀리 던져서 javax.swing.ProgressMonitorInputStream을 연결 입력 스트림으로 감 쌉니다.