KeyListener没有响应键盘输入

时间:2013-10-19 19:23:50

标签: java input keyboard keylistener runnable

我一直在尝试自己学习更高级的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) {

}

}

2 个答案:

答案 0 :(得分:2)

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

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

此外,您实际上需要将KeyListener添加到组件中。首先阅读How to Write a Key Listener上的Swing教程。该示例应该可以帮助您,并向您展示更好的方法来设计您的程序,这样您就不会在任何地方使用静态。

答案 1 :(得分:2)

  • 要使KeyListener正常工作,您必须先通过addKeyListener(...) 添加到组件中。你没有这样做,除非有机会,否则它将无效。
  • 正如camickr所说,KeyListener要求它侦听的组件具有焦点。
  • 通常最好不要在Swing应用中使用KeyListeners,而是使用Key Bindings
  • 拍摄,你甚至没有任何类型的可见GUI,所以你真的需要做更多的教程研究,以便在考虑添加KeyListener或使用Key Bindings之前先启动并运行你的gui。

修改
你说:

  

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

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