2013-10-10 39 views
0

我有一個JLabel和一個JButton。在下面的代碼中,我試圖在for循環執行之前更改按鈕上的JLabel文本,但循環執行後JLabel文本發生更改。以下是代碼 -Java中的JOptionPane的ConfirmDialog

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循環中做其他事情,這也需要一些時間,直到循環執行我想顯示Please Wait ...。但是它在執行循環後顯示。問題是什麼。請幫助...

回答

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

看到我的編輯abouve –

+0

多數民衆贊成在工作謝謝,但我得到另一個問題。當循環運行時,我可以再次點擊按鈕。我想要的是直到循環運行除了打印以外什麼也沒有發生。 –

0

這僅僅是因爲當方法後,完成其執行其改變按鈕上的文字,所以你應該使用線程概念喬吉說..

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();