2013-05-25 2 views
-1

Как бы вы сделали программу Java завершающей себя, когда нажата кнопка «ESCAPE»? Я пробовал:Как завершить программу?

public class Main { 

    public static final int i = 12; 

    public static void Exit(KeyEvent e) { 

    if (e.getKeyCode() == 27) 
    { 
     System.exit(0); 
    System.out.println("Closing"); 
    } 

} 

public static void main (String args[]) { 

    while(i <= 0) { 
     Exit(null); 
    } 

    } 
} 

Однако, похоже, что это не сработало. Какие-либо предложения?

+1

Если вы хотите обрабатывать отдельные нажатия клавиш, создайте графический интерфейс Swing. В Интернете есть отличные учебные пособия, которые Google может вам помочь. –

+0

Посмотрите это http://stackoverflow.com/questions/16381879/how-to-process-the-backspace-terminal-control-character-in-java –

ответ

0

Некоторые опции:

  • Использование System.exit(0).
  • Все резьбы не-deamon завершены.

Если это свинг приложение, а затем использовать ключевые привязок вместо ключевых слушателей, и вы можете положиться на кнопку X в JFrame, чтобы прекратить применение (там, где вы будете использовать frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)).

+0

На самом деле я не могу это использовать, как когда программа запускает все кнопки становятся «несжимаемыми» из-за постоянной цикличности программы. Вот почему мне нужен ключ для закрытия программы при нажатии. –

1
while(i <= 0) { 
    ... 
} 

и я инициализируется как 12. Это никогда не войдет в цикл, если не изменить я ценю что-то меньше или равно 0.

0

я мог понять, только два способа перехвата ключей в Java.

  1. Если вы хотите сделать это для отдельного приложения Java, то вам придется сделать это изначально, используя JNI.You может Google, чтобы узнать C библиотеки/C++ для перехвата клавиш. И затем вы можете загрузить DLL в java, чтобы помочь вам с вашим требованием.

  2. Если вы пишете GUI на основе SWING, вы можете добавить keypress lisenter в свои компоненты. Возможно, вам придется добавить его ко всем компонентам рекурсивно, чтобы перехватить ключ на любом уровне вашего пользовательского интерфейса. Вот пример кода, который:

Добавить ключ слушателя до компонентов и его детей с помощью метода:

private void addKeyAndContainerListenerRecursively(Component c) 
    { 
//Add KeyListener to the Component passed as an argument 
      c.addKeyListener(this); 
//Check if the Component is a Container 
      if(c instanceof Container) { 
//Component c is a Container. The following cast is safe. 
       Container cont = (Container)c; 
//Add ContainerListener to the Container. 
       cont.addContainerListener(this); 
//Get the Container's array of children Components. 
       Component[] children = cont.getComponents(); 
//For every child repeat the above operation. 
       for(int i = 0; i < children.length; i++){ 
        addKeyAndContainerListenerRecursively(children[i]); 
       } 
      } 
    } 

метод, чтобы сделать получить ключ пресс-конференцию:

public void keyPressed(KeyEvent e) 
    { 
      int code = e.getKeyCode(); 
      if(code == KeyEvent.VK_ESCAPE){ 
//Key pressed is the Escape key. Hide this Dialog. 
       setVisible(false); 
      } 
      else if(code == KeyEvent.VK_ENTER){ 
//Key pressed is the Enter key. Redefine performEnterAction() in subclasses 
to respond to pressing the Enter key. 
       performEnterAction(e); 
      } 
//Insert code to process other keys here 
    } 

Надеюсь, это поможет!

+0

Я попытался использовать это, но у меня есть исключение NullPointerException. У меня изначально была кнопка «exit», которая завершала программу, но как только человек нажимает кнопку «start», он переходит в бесконечный цикл, который постоянно вызывает нажатие кнопки «start» и делает пользователя неспособным использовать красную кнопку «X» или кнопку «Выход». Однако из-за того, что цикл находится в ActionListener для кнопки, я не могу использовать KeyEvent. Я не новичок в программировании, но я определенно участвую и имею много дел. Есть идеи? –

Смежные вопросы