当按下“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);
}
}
}
然而,它似乎不起作用。有什么建议吗?
答案 0 :(得分:1)
while(i <= 0) {
...
}
并将i初始化为12.除非将i值更改为小于或等于0的值,否则永远不会进入循环。
答案 1 :(得分:0)
一些选项:
System.exit(0)
。如果这是一个swing应用程序,那么使用键绑定而不是键侦听器,你可以依赖JFrame的X按钮来终止应用程序(你使用frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
的地方)。
答案 2 :(得分:0)
我只能找到两种方法来拦截java中的键。
如果您想为独立的Java应用程序执行此操作,那么您必须使用JNI本地执行此操作。您可以谷歌查找C / C ++库以拦截密钥。然后你可以在java中加载dll来帮助你满足你的需求。
如果您正在编写基于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
}
希望它有所帮助!