处理java中的关键事件

时间:2009-03-26 04:31:45

标签: java keylistener

假设我有一个GUI,我希望程序在按下空格键时实际运行,但是如果再次按下空格键则我希望程序退出。这样的事情会起作用吗?

public class MouseClicker extends JApplet implements KeyListener{
int counter = 0;
MouseClicker m1 = new MouseClicker();

//all of the other methods

public void keyPressed( KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode==KeyEvent.VK_SPACE){
 m1.click();
 counter ++;
 if(counter%2==0)
  System.exit(0);
}
//other methods needed for KeyListener
}

2 个答案:

答案 0 :(得分:2)

试一试,看看; - )

说真的,你是什么意思在按空格键时要编程运行?除非程序已在运行,否则您将如何收到KeyEvent

至于问题的另一半,通常,当按下空格键时,您应该使Java退出。请注意,使用计数器没有意义,因为只要Java退出,计数器的值就会丢失。另请注意,JApplet是“一般”的例外...您通常无法从applet调用System.exit,因为applet在浏览器的控制下运行而Java只是假设在用户关闭浏览器时退出,而不是在applet完成时退出。可能有其他applet在同一个JVM中运行,但他们可能还没有完成他们正在做的事情。

答案 1 :(得分:0)

可能,我认为AWT代码是正确的,但其余部分非常神秘(不是我不理解它,但它并不表达你实际上做得很好,是吗?)

怎么样:

boolean running=false;

...
if(running)
    System.exit(0);
else
    running=true;

代替?

更新: 在阅读了另一篇文章的讨论后,你会有一点陌生感。

这是AWT线程的概念。必须在该线程上完成AWT所做的一切。因此,当按下空格键时,您将在AWT线程上获得该事件。你可能不想保留它,因为只要你抓住它,就会阻止其他图形更新。

我建议查看SwingTimer设置一个摇摆计时器,每隔几毫秒通知你一次,并且该通知将在AWT线程中进入,以便您可以使用它来单击您的按钮,然后退出并等待下一个计时器事件

当他们再次按空格键时,system.exit()应该可以正常工作。