перерыв петли, если Esc был нажат

Я написал программу на языке JAVA, которая принимает входные данные с консоли с помощью classа Scanner ….

теперь я хочу добавить эту способность к моему коду, чтобы существовать цикл (while), когда пользователь нажимает кнопку Esc. до сих пор я думал, что class Keyboard может мне помочь, но это было похоже на Scanner … Я пытался использовать события, но не знаю, как их правильно использовать.

Исходный код:

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 вашего приложения, когда нажата кнопка escape.

Если вы хотите поймать ключевые события, вам нужно будет сделать приложение GUI, используя AWT или Swing. Если все, что вы хотите, это завершить свою программу во время ее запуска, попробуйте нажать Ctrl + C (это работает на большинстве терминалов).

Взгляните на эту страницу, это может помочь вам: http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html

Специально, эта часть:

int getKeyCode ()

Получает код ключа, связанный с этим событием. Код ключа определяет конкретный ключ на клавиатуре, который пользователь нажал или отпустил. Класс KeyEvent определяет множество ключевых кодовых констант для общедоступных ключей. Например, VK_A указывает ключ с меткой A, а VK_ESCAPE указывает клавишу Escape.

Давайте будем гением компьютера.