我最近修改了我的程序,当我调用另一个使用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;
}
}
谢谢,非常感谢您的帮助。
答案 0 :(得分:1)
JFrame
永远不是模态的。这意味着,如果您创建一个新帧,程序将不会等到该帧在正常程序继续之前关闭。这需要JDialog
。并且调用另一个类提供的main
- 方法也不会创建新进程,因此程序不会等待用户输入。到目前为止,对于不可能的事情。
解决方案:
JDialog
。这个类是模态的。这意味着在使对话框可见后,程序将一直等到对话框关闭。wait()
和notify()
完成。请注意,在事件队列中调用wait()
将阻止事件队列,因此很可能是程序流。优选的解决方案是JDialog
,既不建议也不需要实施锁定,除非你想要试验或者有一个无法用{{1来解决的真正复杂的问题}}