2013-10-10 4 views
0

나는 JLabel과 JButton을 가지고있다. 다음 코드에서는 for 루프가 실행되기 전에 button click에서 JLabel 텍스트를 변경하려고 시도하지만 루프가 실행 된 후 JLabel 텍스트가 변경됩니다. 코드는 다음과 같습니다.자바에서 JOptionPane의 확인 다이얼

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           

     int n = JOptionPane.showConfirmDialog(null, "Print??"); 
     if(n==JOptionPane.YES_OPTION) 
       { 
        jLabel1.setText("Please Wait..."); 
        System.out.println("Hello"); 

        for(int i = 0 ; i<65000;i++) 
        { 
         System.out.println("printing"); 
        } 

       } 
    }  

그러나 Hello 실행 전에 루프가 인쇄됩니다. 루프를 실행할 때까지 for 루프에서 다른 작업을하고 있습니다. 잠깐 기다려주십시오 ... 표시하고 싶습니다. 단, 루프 실행 후 표시됩니다. 문제는 무엇입니까. 제발 도와주세요 ...

답변

0
It is better if you use Thread concept in this issue. 

**EDIT** 

Thread thread1 = new Thread() { 
    public void run() { 
// set your label code here 
    } 
}; 
Thread thread2 = new Thread() { 
    public void run() { 
    // iterate your loop here 
    } 
}; 
thread1.start(); 
thread2.start(); 
+0

줄 수 있습니까? 코드? –

+0

내 편집보기 참조 –

+0

작동 감사합니다,하지만 다른 문제가 있습니다. 루프가 실행 중일 때 버튼을 다시 클릭 할 수 있습니다. 루프가 실행될 때까지는 인쇄 이외의 다른 일은 일어나지 않기를 바래요. 그 시간까지 –

0

이 단지 방법은 이후의 실행을 완료 할 때 그것 때문에 jogi 말했듯이 당신이 스레드 개념을 사용한다, 그래서 그 변경 버튼 텍스트 ..

public class YouClass implements Runnable { 

public void run() { 
    // set text here 
} 

public void run() { 
    // use loop here 
} 

public static void main(String args[]) { 
    (new Thread(new YouClass())).start(); 
    (new Thread(new YouClass())).start(); 
} 

} 
0
if (n == JOptionPane.YES_OPTION) { 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       jLabel1.setText("Please Wait..."); 
       System.out.println("Hello"); 
       for (int i = 0; i < 65000; i++) { 
        System.out.println("printing"); 
       } 
       jLabel1.setText("Done..."); 
      } 
     }).start(); 
    } 
1
Thread t1 = new Thread() { 
      public void run() { 
      lbl.setText("Please wait..."); 
      pnl.updateUI(); 
     } 
    }; 
    Thread t2 = new Thread() { 

     public void run() { 
      for (int i = 0; i < 10000; i++) { 
       pnl.updateUI(); 
       System.out.println("Printing"); 
      } 
      lbl.setText("Done!!!"); 
     } 
    }; 

버튼을 클릭 할 때 전역으로 선언하십시오. t1.start()t2.start();