第二个循环首先执行

时间:2016-02-26 05:41:21

标签: java swing loops

tfJTextField

预期的执行流程:

  1. 在名为first loop的{​​{1}}中输入内容之前,控件不应移出JTextField
  2. 第二个tf只应在控件移出第一个之后运行。

    while loop
  3. 问题:

    • 第二个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中输入内容,控件就会移动到第二个while loop?第二个tf甚至不依赖于while loop
    • tf输入内容后,我甚至不需要按enter。在按tf之前如何识别输入的值?

    主要问题:

    • 为什么第二个循环首先被执行?
    • 根据一般控制流程,控件必须保留在第一个循环中,直到遇到enter语句。为什么这里不遵循这个?
    • 当我按下开始按钮时,控件将移回上一个循环。
    • 控件永远不会在第一次循环中进入break

    注意: 第二个while循环仅在我输入else if之后执行。只要在循环执行时先按下“开始”按钮,我就会{。{3}} initial GUI when something is entered in tf,note the console, not even pressed enter and second loop executed

1 个答案:

答案 0 :(得分:1)

如果没有可运行的示例,很难确定代码的上下文代码段可能会或可能不会执行什么

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

通常情况下,您可以使用DocumentListener获取实时反馈,也可以使用ActionListener,这样当用户按下 Enter 按钮(或按下其他按钮)时,您就会收到通知在UI上)