2016-02-26 110 views
0

tf是一個JTextField第二個循環正在執行第一個

預期執行的流程:

  1. 控制不應該直到東西是在一個名爲tfJTextField進入搬出first loop的。
  2. 第二個while loop只能在控件移出第一個後才能運行。

    while(true) 
    { 
        if((!tf.getText().equals(""))) 
        { 
    p.addActionListener(new ActionListener(){ 
    
        public void actionPerformed(ActionEvent e) 
        { 
        String name=tf.getText(); 
        System.out.println("Hello "+name+",\nWelcome to Guess the number Game"); 
    } 
    }); 
    break; 
    
    } 
        else if (tf.getText().equals("")) 
        { 
         p.addActionListener(new ActionListener(){ 
           public void actionPerformed(ActionEvent e) 
           { 
            p.setSelected(false); 
           } 
          }); 
         continue; 
        } 
    } //while end 
    while(true) 
    { st="game on"; 
        System.out.println(st); 
        if(!st.equals("")) 
        { 
        gamer3 game1=new gamer3(); 
        Thread nt =new Thread(game1); 
        nt.start(); 
    
        break; 
    } 
    

問題:

  • while loop是越來越首先執行。打印出game on
  • 只要我輸入tf的東西,第二個while loop內的代碼就會被執行。爲什麼只要我輸入tf的東西,控件就會移動到第二個while loop?第二個while loop甚至不依賴於tf
  • 輸入tf後,我甚至不需要按enter。在按enter之前輸入的值如何被識別?

主要問題:

  • 爲什麼第二循環得到第一執行?
  • 根據控制的一般流程,控制器必須保持在第一個循環,直到遇到break語句。爲什麼這裏沒有遵守這個規定?
  • 當我按下開始按鈕時,控件回到上一個循環。
  • 控制在第一個while循環中從未進入else if

注意: 第二個while循環只有在我輸入tf後纔會執行。並且一旦我在循環執行時首先按下啓動按鈕。 initial GUI when something is entered in tf,note the console, not even pressed enter and second loop executed After pressing start,content in first loop gets executed

+0

我會關注通知關於你重複添加'ActionListener'到一個循環內的字段,只是複合它們。考慮提供一個[可運行的示例](https://stackoverflow.com/help/mcve),它可以證明你的問題。這不是代碼轉儲,而是您正在做的事情的一個例子,它突出了您遇到的問題。這將導致更少的混淆和更好的響應 – MadProgrammer

+0

@MadProgrammer我已添加圖像以顯示實際發生的情況。在「問題」一節中,我提到了預計不會發生的事情。我在第一個while循環中編寫了'System.out.println(「loop 1」);'它實際上重複地打印了'loop 1'。這意味着,控件保留在「循環1」中,直到在文本字段中輸入內容。 –

+0

無法調試圖像 – MadProgrammer

回答

1

沒有一個可運行的例子,這是很難確定哪些代碼一個徹頭徹尾的上下文片斷可能會或可能不會做

我「可疑」你有一個不受控制的線程是檢查觸發您沒有準備好的動作的狀態 - Swing不是線程安全的,並且您不應該從EDT的上下文外部監視或修改狀態,請記住,Swing(與大多數GUI一樣)是事件驅動的。

通常你會使用一個DocumentListener獲得實時反饋或ActionListener這樣你就可以當用戶按下回車按鈕(或壓在UI的另一個按鈕)

相關問題