3

代码 :

package keylogger;

import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;

public class GlobalKeyListenerExample implements NativeKeyListener {
    public void nativeKeyPressed(NativeKeyEvent e) {
            System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));

            if (e.getKeyCode() == NativeKeyEvent.VK_ESCAPE) {
                    try {
                            GlobalScreen.unregisterNativeHook(); // LINE 18
                    }
                    catch (NativeHookException ex) {
                            System.err.println("You cannot call unregisterNativeHook() from the native dispatch thread.");
                    }
            }
    }


    public void nativeKeyReleased(NativeKeyEvent e) {
            System.out.println("Key Released: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
    }

    public void nativeKeyTyped(NativeKeyEvent e) {
            System.out.println("Key Typed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
    }


    public static void main(String[] args) {
            try {
                    GlobalScreen.registerNativeHook(); // LINE 38
            }
            catch (NativeHookException ex) {
                    System.err.println("There was a problem registering the native hook.");
                    System.err.println(ex.getMessage());
                    ex.printStackTrace();
            }

            //Construct the example object and initialze native hook.
            GlobalScreen.getInstance().addNativeKeyListener(new GlobalKeyListenerExample());
    }
}

这与google code 上给出的代码相同。我下载并在我的项目中使用了JNativeHost 库。但我收到以下错误:

Cannot find unregisterNativeHook,registerNativeHook. //(line 18,38)
The IDE also says GlobalKeyListenerExample is not abstract and doesn't override abstract method keyReleased. 

对于第一个错误,方法是在此处定义的,它们是本机方法,我还导入了 GlobalScreen 类。

为什么我已经覆盖了第二个错误?但是,当我@Override在该方法之前添加注释时,IDE 会给出一个错误,指出该方法不会覆盖或从超类型实现。

4

4 回答 4

2

如果您使用的是 eclipse,请尝试从一个空类开始,如下所示:

public class GlobalKeyListenerExample implements NativeKeyListener {
}

您应该在声明中收到错误,并且应该可以使用快速修复“实现抽象方法”。执行快速修复并查看它是否在之后编译(通常应该)。然后你可以继续添加你的逻辑。

于 2012-05-22T07:22:50.417 回答
2

一切安好 !我认为可能是错误的一件事是您可能针对您复制和粘贴的代码使用的库版本!使用下面标记的库。你可以在这里下载

在此处输入图像描述

从评论中我猜你正在使用netbeans。将此 jar 文件添加到您的库中。

于 2012-05-22T07:26:41.307 回答
0

您说您已覆盖的方法很可能与基类中存在的签名不同。因此,您的方法不被视为被覆盖,而是完全是一个新的重载版本。验证方法签名是否正确。

于 2012-05-22T06:36:26.663 回答
0

如果您使用的是 JDK 1.5,则只能在覆盖基类的方法时使用 @Override,而不能在从接口实现方法时使用。

于 2012-05-22T10:19:06.433 回答