按键侦听器不响应键盘输入



我一直在尝试自己学习更高级的Java(我的类只涵盖文本文件),但我在使用KeyListener时感到困惑。我设法让它在另一个程序中工作,但我在这里找不到问题。控制台上不显示任何错误。该程序使用机器人在文本文件中键入预定义的字符串。这是主要类。

    import java.awt.AWTException;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;
    import javax.swing.SwingUtilities;

    public class FileTyper implements KeyListener {
static Keyboard kb;
static Scanner infile;
static boolean on = false;
static Window window;
public static void main(String args[]) throws AWTException, FileNotFoundException{
    init();
    start();
}
private static void init() throws AWTException, FileNotFoundException{
    window = new Window();
    kb = new Keyboard();
    kb.setSpeed(50);
    infile = new Scanner(new File("C:/Users/Ali/Desktop/input.txt"));
}
private static void start(){
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            if(on && infile.hasNext()){
                String temp = infile.nextLine();
                kb.type(temp);
                kb.type("n");
            }
        }
    });
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
    switch(e.getKeyCode()) {
    case KeyEvent.VK_F9:
        System.out.println("CONSOLE: Starting");
        on = true;
        break;
    case KeyEvent.VK_F10:
        System.out.println("CONSOLE: Stopping");
        on = false;
        break;
    }
}
@Override
public void keyTyped(KeyEvent e) {
}

}

  • 要使 KeyListener 正常工作,必须先通过 addKeyListener(...) 将其添加到组件中。你不这样做,除非有机会,否则它不会起作用。
  • 正如camickr所指出的,KeyListener要求它侦听的组件具有焦点。
  • 通常最好不要在 Swing 应用程序中使用 KeyListeners,而是使用密钥绑定。
  • 拍摄,你
  • 甚至没有任何类型的可见GUI,所以你真的需要做更多的教程研究,首先让你的GUI启动并运行,然后再考虑添加KeyListener或使用键绑定。

编辑
您声明:

如果我想在程序窗口最小化时使用 KeyListener 怎么办?
我的意思是使用快捷键暂停启动或停止程序

Core Java本身无法做到这一点。为此,您需要使用 JNI 或 JNA 增强 Java,或者使用特定于操作系统的实用程序。我已经将AutoIt用于我的Windows应用程序。

与您的问题无关,但不要使用静态方法和变量。这表明设计不佳。

如果 KeyListener 不起作用,则您的组件可能没有焦点。

此外,您实际上需要将 KeyListener 添加到您的组件中。首先阅读有关如何编写密钥侦听器的 Swing 教程。该示例应该对您有所帮助,并向您展示一种更好的方法来设计程序,这样您就不会在任何地方都使用静态。

最新更新