-1

当按下“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);
    }

   }
}

但是,它似乎不起作用。有什么建议么?

4

3 回答 3

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

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

于 2013-05-25T23:09:51.200 回答
0

一些选项:

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

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

于 2013-05-25T23:06:50.287 回答
0

我只能找出两种截取java中的键的方法。

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

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

使用以下方法将关键侦听器添加到组件及其子组件:

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
     }

希望能帮助到你!

于 2013-05-25T23:22:53.213 回答