2012-05-22 198 views
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()); 
    } 
} 

这是相同的代码给出here on google code。我下载并在我的项目中使用了JNativeHost library。但我得到以下错误:

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

第一个错误the methods are defined here and they are native methods我也有进口的GlobalScreen类。

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

+0

这是你收到的编译错误吗?你有没有将jar添加到你的类路径中? – jogabonito

+0

@jogabonito [是的,我已经保存在我的项目库中的jar文件](http://i46.tinypic.com/eugfog.jpg) –

+0

我不能看到你发布的链接(它阻止我在哪里)。我复制了你的代码并链接了这个库,它适用于我。不是一个非常有用的答案,我知道:-) – jogabonito

回答

2

一切都很好!我认为可能会出错的一件事是您可能使用的库的版本与您复制并粘贴的代码相对应!使用下面标记的库。 You can download it from here

enter image description here

从我猜你使用的是NetBeans的意见。将此jar文件添加到您的库。

0

大多数情况下,您说您重写的方法与基类中存在的方法不同。所以,你的方法不被认为是重写的,但是完全是一个新的重载版本。验证方法签名是否正确。

+1

这是显而易见的原因!但签名和一切都是一样的 –

2

如果您正在使用Eclipse,试着以这样的空类:

public class GlobalKeyListenerExample implements NativeKeyListener { 
} 

您应在申报和速战速决“实现抽象方法”应该可以得到一个错误。执行快速修复并查看它是否随后编译(通常应该)。然后你可以继续添加你的逻辑。

+0

这确实是一个非常好的方法! –

0

如果您使用JDK 1.5,@Override只能在从基类重写方法时使用,而不能在从接口实现方法时使用。

相关问题