如果按下Esc,则打破循环

我用JAVA语言编写了一个程序,它使用Scanner类接受来自控制台的输入….

现在我想在我的代码中添加此function,以便在用户按下Esc Button时存在循环(while)。 到目前为止,我认为键盘类可以帮助我,但它就像扫描仪…我试图使用事件,但不知道如何正确使用它们….

源代码:

package switchCase_v1; import cs1.Keyboard; import java.util.EventObject; import java.awt.AWTEvent; import java.awt.event.KeyEvent; import java.awt.event.ComponentEvent; import java.awt.event.InputEvent; import java.util.*; public class SwithCase { public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); System.out.println("enter the name or number of month: "); int monthNumber = input.nextInt(); while (true) { KeyEvent button; if (button.getKeyCode() == 27) break; else if (monthNumber == '\n') { System.out.println("enter a number"); monthNumber = input.nextInt(); } else { switch (monthNumber) { case 1: case 2: case 3: case 4: case 5: case 6: System.out.println("it has 31 days"); monthNumber = input.nextInt(); break; case 7: case 8: case 9: case 10: case 11: case 12: System.out.println("it has 30 days"); monthNumber = input.nextInt(); break; default: System.out.println("it is not a valid number"); monthNumber = input.nextInt(); break; } } } } } 

当我想考虑像“Esc”或“Enter”这样的点击按钮时,我如何处理案件? 我认为它也适用于使用ASCII码。

这是我的代码的新版本:

 public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); System.out.print("Check number of days"); KeyEvent e; if (e.getKeyCode() == KeyEvent.VK_ENTER) { System.out.println("enter the name or number of month: "); int monthNumber=input.nextInt(); } else if (Keyboard.getEventKey()==Keyboard.KEY_ESCAPE) { System.out.println("GoodBye"); } } 

}

但它有一个错误,说e对象可能没有被初始化…… !!!!!我该怎么办?!!!

您目前正在创建一个命令行应用程序,它从标准输入中读取内容并将内容打印到标准输出。 处理按钮的方式完全取决于运行程序的终端,大多数终端在按下转义时不会向应用程序的stdin发送任何内容。

如果要捕获关键事件,则必须使用AWT或Swing创建GUI应用程序。 如果您只想在程序运行时终止程序,请尝试按Ctrl + C(这适用于大多数终端)。

看看这个页面,它可能对你有帮助: http : //docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html

特别是这部分:

int getKeyCode()

获得与此事件关联的密钥代码。 密钥代码标识用户按下或释放的键盘上的特定键。 KeyEvent类为常见键定义了许多键代码常量。 例如,VK_A指定标记为A的键,VK_ESCAPE指定Escape键。