第二个循环正在执行第一个

第二个循环正在执行第一个

问题描述:

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://*.com/help/mcve),它可以证明你的问题。这不是代码转储,而是您正在做的事情的一个例子,它突出了您遇到的问题。这将导致更少的混淆和更好的响应 – MadProgrammer

+0

@MadProgrammer我已添加图像以显示实际发生的情况。在“问题”一节中,我提到了预计不会发生的事情。我在第一个while循环中编写了'System.out.println(“loop 1”);'它实际上重复地打印了'loop 1'。这意味着,控件保留在“循环1”中,直到在文本字段中输入内容。 –

+0

无法调试图像 – MadProgrammer

没有一个可运行的例子,这是很难确定哪些代码一个彻头彻尾的上下文片断可能会或可能不会做

我“可疑”你有一个不受控制的线程是检查触发您没有准备好的动作的状态 - Swing不是线程安全的,并且您不应该从EDT的上下文外部监视或修改状态,请记住,Swing(与大多数GUI一样)是事件驱动的。

通常你会使用一个DocumentListener获得实时反馈或ActionListener这样你就可以当用户按下回车按钮(或压在UI的另一个按钮)