如何终止程序?

时间:2013-05-25 23:05:10

标签: java

当按下“ESCAPE”时,如何使Java程序自行终止?我试过这个:

   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);
    }

   }
}

然而,它似乎不起作用。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

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

并将i初始化为12.除非将i值更改为小于或等于0的值,否则永远不会进入循环。

答案 1 :(得分:0)

一些选项:

  • 使用System.exit(0)
  • 所有非deamon线程都已完成。

如果这是一个swing应用程序,那么使用键绑定而不是键侦听器,你可以依赖JFrame的X按钮来终止应用程序(你使用frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)的地方)。

答案 2 :(得分:0)

我只能找到两种方法来拦截java中的键。

  1. 如果您想为独立的Java应用程序执行此操作,那么您必须使用JNI本地执行此操作。您可以谷歌查找C / C ++库以拦截密钥。然后你可以在java中加载dll来帮助你满足你的需求。

  2. 如果您正在编写基于SWING的GUI,则可以将keypress lisenter添加到组件中。您可能必须以递归方式将其添加到所有组件,以拦截UI任何级别的密钥。以下是示例代码:

  3. 使用方法向组件及其子组件添加键侦听器:

    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
         }
    

    希望它有所帮助!