Java keypressed事件未触发

时间:2011-12-20 13:43:55

标签: java applet awt keylistener awtrobot

在编写这段代码的过程中,我意识到如果制作成jar,就必须有一种优雅的方式来关闭程序。我选择使用键'F1'。我在网上研究了一些文章,发现我试图处理它的方式应该是一种可行的方法,但该程序似乎甚至没有触发事件方法。 system.out.println永远不会显示。

import java.applet.Applet;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;


public class MouseMove extends Applet implements KeyListener{

public static Random randomGenerator = new Random();
public static int code;

public void init(){
    addKeyListener(this);
}

public void keyPressed(KeyEvent evt){
    code = evt.getKeyCode();
    System.out.println("Key: "+KeyEvent.getKeyText(code));

    if(code == KeyEvent.VK_F1){
        System.exit(0);
    }
}

public void keyTyped(KeyEvent e){   
}
public void keyReleased(KeyEvent e){
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    try {

        Robot robot = new Robot();          

        while(true){

            robot.mouseMove((int)(Math.random()*1366), (int)(Math.random()*768));
            robot.delay(5000);
            robot.mouseWheel((int)(Math.random()*786));
            robot.delay(5000);
        }
    } catch (AWTException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}//main

}//class

3 个答案:

答案 0 :(得分:2)

  1. KeyListener仅在Component窗口中有Focus时才有效。

  2. 您必须创建一个visible容器。

  3. setFocusable() for Component

  4. 最好使用Swing JComponent

  5. 使用JFrame代替JApplet

答案 1 :(得分:1)

您永远不会创建MouseMove的实例。您的主要方法只是制作机器人并开始循环。如果对象不存在,则永远不会调用其中一种方法。

答案 2 :(得分:1)

使用applet时不要使用System.exit()。看看Java Applet(教程)。您需要创建.htm文档并添加<applet>标记以运行applet。您可以使用AppletViewer工具或网络浏览器来启动该htm文档。

file.htm

<applet code="MouseMove" width="200" height="200"></applet>

从命令行启动Appletviewer工具或在Web浏览器中打开.htm。

>appletviewer file.htm