2016-07-26 179 views
-2

我試着運行下面的代碼,但是當單選按鈕trueButton或falseButton被選中時,它不會跳出for循環。跳出for循環

for(;;){    
    if (trueButton.isSelected() || falseButton.isSelected()){ 
     System.out.print("Selected"); 
     break; 
    } 
} 

但是,如果我添加System.out.println(「」);在if語句之前,當選擇trueButton或falseButton時,我可以跳出for循環。

for(;;){ 
    System.out.println(""); 
    if (trueButton.isSelected() || falseButton.isSelected()){ 
     System.out.print("Selected"); 
     break; 
    } 
} 

反正我有可以打破循環,而不if語句之前加入的System.out.println(「」)?

如果有人能解釋第一個代碼爲什麼不起作用,那將會很棒。

由於我是編程新手,如果我對任何事情一無所知,請原諒我。

編輯:我已經創建了一個類似的場景,以供大家測試。

public static void main(String[] args){ 
    JFrame window = new JFrame("Hello"); 
    JRadioButton trueButton = new JRadioButton("True "); 
    JRadioButton falseButton = new JRadioButton("False ");  

    window.setSize(400, 325); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    window.setLayout(new FlowLayout()); 
    window.add(trueButton); 
    window.add(falseButton); 

    trueButton.setVisible(true); 
    falseButton.setVisible(true); 
    window.setVisible(true); 

    for(;;){ 
     if (trueButton.isSelected() || falseButton.isSelected()){ 
      System.out.println("Selected"); 
      break; 
     } 
    } 
    System.out.println("Done"); 
} 

如果我們設法打破循環,應該打印「完成」。

+3

爲什麼不使用while循環? 'while(!trueButton.isSelected()&&!falseButton.isSelected()){} System.out.print(「Selected」);'另外,如果你使用Swing,這基本上會破壞你的GUI。 – Compass

+2

你確定沒有其他區別嗎?因爲這沒有意義 –

+0

這種情況應該在按鈕上使用監聽器,並按照按鍵操作。 – jr593

回答

1

試試這個:

for(;;){    
      if (trueButton.isSelected() || falseButton.isSelected()){ 
      System.out.print("Selected"); 
      return; 
     } 
    } 

或本:

outerloop: 
    for(;;){    
      if (trueButton.isSelected() || falseButton.isSelected()){ 
      System.out.print("Selected"); 
      break outerloop; 
     } 
    } 

否則看起來一切都設置正確的... 希望這有助於

+0

我在嘗試代碼時遇到了同樣的問題。這是行不通的。但是,如果我在循環之前添加System.out.println(「」)語句,我設法擺脫了循環。謝謝你的幫助。 – togglebreak

+0

讓我試着複製你的代碼,看看 –

+0

好不好。非常感謝你的幫助。 – togglebreak

3

當編寫一個GUI,你應該避免不惜任何代價阻止循環,因爲它會導致您的應用程序無響應。

您應該添加一個ActionListener來「點擊」按鈕被點擊。否則,您只需使用isSelected方法檢查單擊哪個按鈕而不需要循環;例如,在提交表單或執行一些計算時。

如果您絕對需要不斷閱讀按鈕的狀態,請使用Thread

+0

謝謝。我會嘗試使用ActionListener。你知道我的代碼不工作的原因嗎? – togglebreak

+0

很可能是因爲您有一個看起來無限循環,它與GUI線程有競爭條件。添加打印語句將代碼暫停足夠長的時間以使條件通過 –

+0

該解釋有很大幫助。謝謝。 – togglebreak