Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java KeyListener不响应键盘输入_Java_Input_Keyboard_Keylistener_Runnable - Fatal编程技术网

Java KeyListener不响应键盘输入

Java KeyListener不响应键盘输入,java,input,keyboard,keylistener,runnable,Java,Input,Keyboard,Keylistener,Runnable,我一直在尝试自己学习更高级的java(我的课程只涉及文本文件),但我在使用KeyListener方面遇到了难题。我设法让它在另一个程序中工作,但我在这里找不到问题。控制台上未显示任何错误。该程序使用robot在文本文件中键入预定义字符串。这是主要课程 import java.awt.AWTException; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java

我一直在尝试自己学习更高级的java(我的课程只涉及文本文件),但我在使用KeyListener方面遇到了难题。我设法让它在另一个程序中工作,但我在这里找不到问题。控制台上未显示任何错误。该程序使用robot在文本文件中键入预定义字符串。这是主要课程

    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不工作,那么您的组件可能没有焦点


此外,您实际上需要将KeyListener添加到组件中。首先阅读上的Swing教程。这个例子应该可以帮助您解决问题,同时也向您展示了一种更好的程序设计方法,这样您就不会到处使用静态方法。

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

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

此外,您实际上需要将KeyListener添加到组件中。首先阅读上的Swing教程。这个例子应该可以帮助您,也可以向您展示一种更好的设计程序的方法,这样您就不会到处使用static了。

  • 要使KeyListener正常工作,必须首先通过
    addKeyListener(…)
    将其添加到组件中。你不这样做,除非它有机会这样做,否则它不会起作用
  • 正如camickr所指出的,KeyListener要求它所侦听的组件具有焦点
  • 通常,最好不要在Swing应用程序中使用KeyListener,而是使用
  • 首先,您甚至没有任何类型的可视GUI,因此您确实需要对教程进行更多的研究,以便在考虑添加键侦听器或使用键绑定之前,首先启动并运行GUI

编辑
你说:


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

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

  • 要使KeyListener正常工作,必须首先通过
    addKeyListener(…)
    将其添加到组件中。你不这样做,除非它有机会这样做,否则它不会起作用
  • 正如camickr所指出的,KeyListener要求它所侦听的组件具有焦点
  • 通常,最好不要在Swing应用程序中使用KeyListener,而是使用
  • 首先,您甚至没有任何类型的可视GUI,因此您确实需要对教程进行更多的研究,以便在考虑添加键侦听器或使用键绑定之前,首先启动并运行GUI

编辑
你说:


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


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

我以前听过,但我不确定如何以其他方式配置它。一个linktot教程会很有帮助:)我以前听过这个,但我不确定如何以其他方式配置它。如果我想在程序窗口最小化时使用KeyListener怎么办?@user2898523:不,那不行。你想在这里干什么?按键记录?不,我的意思是使用快捷键暂停启动或停止program@Killam:核心Java本身无法做到这一点。为了实现这一点,您需要使用JNI或JNA扩充Java,或者使用特定于操作系统的实用程序。我在Windows应用程序中使用了AutoIt。如果我想在程序窗口最小化时使用KeyListener怎么办?@user2898523:不,那不行。你想在这里干什么?按键记录?不,我的意思是使用快捷键暂停启动或停止program@Killam:核心Java本身无法做到这一点。为了实现这一点,您需要使用JNI或JNA扩充Java,或者使用特定于操作系统的实用程序。我在Windows应用程序中使用了AutoIt。