调用JFrame类时,Java程序不会暂停用户输入

时间:2015-08-21 19:55:19

标签: java

我最近修改了我的程序,当我调用另一个使用JFrame的类时,我无法弄清楚为什么它不等待用户输入(在此类中,用户从下拉菜单(ComboBox)中选择他/她的选择) 。值得注意的是,当我使用scanner.nextLine()函数时,在转换为GUI之前程序运行正常。

当变量Airline具有未定义的值时,程序处于While循环中,并且在用户从ComboBox中选择有效响应之前,程序将退出While循环。问题是程序似乎无限循环,并且在调用UndefinedLine类时不会停止用户输入。你们知道我怎么解决这个问题吗?回到我使用scanner.nextLine功能时,它的效果非常好。将程序修改为GUI后,该功能相当于什么?请在下面找到代码:

       while (ExitLoop == false){                   
           switch (Airline) { //Variable Airline
           case "AA": // if Airline variable is "AA"
                  ExitLoop = true; 
                  AA();
           break;

            case "UA":
                  ExitLoop = true;   
                  UA();
            break;      


            default:

                   UndefinedLine UDLobject = new UndefinedLine(); 
                   UDLobject.main(args);  //Calls class UndefinedLine, which is a JFrame Message with a ComboBox, for which the user chooses the correct Airline and based on the user's response the variable Airline is assigned.
                   UDLobject.Airline= Airline;//Assigns value for variable Airline from Class UndefinedLine after user has selected the choice

             break; 
             }
           }

谢谢,非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

JFrame永远不是模态的。这意味着,如果您创建一个新帧,程序将不会等到该帧在正常程序继续之前关闭。这需要JDialog。并且调用另一个类提供的main - 方法也不会创建新进程,因此程序不会等待用户输入。到目前为止,对于不可能的事情。

解决方案:

  • 使用JDialog。这个类是模态的。这意味着在使对话框可见后,程序将一直等到对话框关闭。
  • 添加您自己的例程以等待用户输入。这可以使用wait()notify()完成。请注意,在事件队列中调用wait()将阻止事件队列,因此很可能是程序流。

优选的解决方案是JDialog,既不建议也不需要实施锁定,除非你想要试验或者有一个无法用{{1来解决的真正复杂的问题}}