Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.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_Awt_Ui Automation_Keylistener - Fatal编程技术网

解释Java中的KeyListener

解释Java中的KeyListener,java,awt,ui-automation,keylistener,Java,Awt,Ui Automation,Keylistener,我是Java新手,正在使用robot类。我想为我的机器人做一个紧急停止功能,这样当它出错时,我就可以让自动化结束。虽然到目前为止,机器人一直很容易,但我无法理解关键听众,请以“我的第一个关键听众”的方式解释,谢谢! 以下是我到目前为止的情况: public static void keyboard(String input, HWND window) throws Exception { System.out.println("Keyboard Typing:\n" + inpu

我是Java新手,正在使用robot类。我想为我的机器人做一个紧急停止功能,这样当它出错时,我就可以让自动化结束。虽然到目前为止,机器人一直很容易,但我无法理解关键听众,请以“我的第一个关键听众”的方式解释,谢谢! 以下是我到目前为止的情况:

public static void keyboard(String input, HWND window) throws Exception {
        System.out.println("Keyboard Typing:\n" + input);
        //This is just to stop the error, but I don't know how
        //to actually listen
        KeyEvent e = null;  
        for (int i = 0; i < input.length(); i++) {;
            keepFocus(window);
            if(stopBot(e /*How to pass a key press*/) == true){
                break;
            }
            char c = input.charAt(i);
            keyboardHandler(c);
            Thread.sleep(80);
        }
    }

    public static boolean stopBot(KeyEvent e){
        if(e.getKeyCode() == KeyEvent.VK_END){
            return true;
        }
        return false;
    }
公共静态无效键盘(字符串输入,HWND窗口)引发异常{
System.out.println(“键盘键入:\n”+输入);
//这只是为了阻止这个错误,但我不知道怎么做
//倾听
KeyEvent e=null;
对于(inti=0;i

还有其他代码,但这就是与我的问题相关的所有代码

我认为实现关键事件的最简单方法是让当前类扩展关键侦听器类。基本上,您希望当前类在后台监听击键。首先,将实现添加到类名中:

public YourClassName implements KeyListener {
}
现在,您的班级能够在背景中收听按键。现在,您需要在代码中添加一个侦听器,然后给它指示在被点击时应该做什么。您将通过调用以下方法添加侦听器:

this.addKeyListener()
您还可以将“this”替换为能够处理操作事件的任何其他实例化对象。现在,您只需要能够指示程序在侦听器拾取按键事件时该做什么。键侦听器将从您扩展的KeyListener类中调用一个方法:keyPressed(KeyEvent e)、keyRelease(KeyEvent e)或keyTyped(KeyEvent e)。这些函数将在拾取键事件并通过函数传递时运行您想要的任何代码。您需要像这样覆盖这些方法:

@Override
public void keyReleased(KeyEvent e) {
        //whatever you want to happen in the case of 
        this event, I assume stop your robot
}

因此,正如您所看到的,您不必担心调用自己的KeyEvent,Java的addKeyListener将处理这个问题,只要您扩展了类并给出了关于如何处理每个事件的说明!希望这有帮助

请以“我的第一个keylistener”的方式解释,这不是一个教程服务。你有一个(具体的)问题吗?我看过的很多其他类似的问题都是:“给你:(这里编码)”我想理解代码,而不仅仅是复制粘贴和交叉手指@andreThompsonby扩展你是说实现吗?我收到一个错误,请求更改为实现或使我的类成为接口。还有,在哪里调用这个.addKeyListener(),说它不能静态调用似乎是错误的?我很抱歉,我完全做到了!让我编辑一下。它不能从静态上下文中调用,您应该将它添加到您正在侦听的任何对象中以获取密钥。如果它和你粘贴的是同一个类,你只需要在任何时候设置它,然后再去听一键。如果你把它放在一个非静态的上下文中有问题,你可能会考虑让你的类实现可运行的或者可能是一个没有主类的对象。好了,现在它不再是静态的了,但是java不识别。