JNA捕获每个窗口:java.lang.AbstractMethodError

时间:2012-10-27 02:36:02

标签: java windows jna

我尝试重现捕获窗口的尝试: Java - Window Image (2岁以后)

我正在使用JNA 3.5.0并使用jre 7在XP和7下测试未修改的代码,并且两者都以相同的跟踪失败:

    Exception in thread "main" java.lang.AbstractMethodError:
    com.sun.jna.Structure.getFieldOrder()Ljava/util/List;
    at com.sun.jna.Structure.fieldOrder(Structure.java:831)
at com.sun.jna.Structure.getFields(Structure.java:857)
at com.sun.jna.Structure.deriveLayout(Structure.java:983)
at com.sun.jna.Structure.calculateSize(Structure.java:908)
at com.sun.jna.Structure.calculateSize(Structure.java:896)
at com.sun.jna.Structure.allocateMemory(Structure.java:357)
at com.sun.jna.Structure.<init>(Structure.java:191)
at com.sun.jna.Structure.<init>(Structure.java:180)
at com.sun.jna.Structure.<init>(Structure.java:167)
at com.sun.jna.Structure.<init>(Structure.java:159)
at com.sun.jna.platform.win32.WinDef$RECT.<init>(WinDef.java:320)
at Paint.capture(Paint.java:24)
at Paint.<init>(Paint.java:71)
at Paint.main(Paint.java:64)

要重现它,只需运行:

import com.sun.jna.platform.win32.WinDef.RECT;

public class Test {
    public static void main(String[] args) {
    RECT rect = new RECT();
    }
}

如果我正确理解JNA,默认情况下应将com.sun.jna.platform.win32.WinDef映射到系统DLL。

似乎没有正确完成映射。

我试图弄清楚如何将WinDef映射到所需的dll,但无法通过com.sun.jna.Native.loadLibrary方法找到如何执行此操作。

我不明白为什么抛出AbstractMethodError而不是UnsatisfiedLinkError,所以我不确定库加载是否真的是问题。

启动com.sun.jna.Structure导致异常,我没有找到任何关于它可以通过本机库加载来修复的信息,或者这是一个有另一个原因的错误。

我认为可能是我的应用程序无法获取的Windows权限(管理员)。

或许我必须明确地对jna进行一些修补,以便他能找到dll(但正如我之前所说,它不是UnsatisfiedLinkError所以它不应该是那样)。

如果您对JNA有任何经验并且可以给我一些建议,请回答我。

鉴于堆栈跟踪,我到目前为止所获得的JNA库的理解,搜索和javadoc探索的时间,我显然错过了JNA普通用户可能找到的东西(原始帖子符合“工作示例”)。

顺便说一下,如果你有关于jna的任何链接或资源(找不到很多),请发布它们:)

提前致谢!

2 个答案:

答案 0 :(得分:1)

我不知道为什么,但它适用于JNA 3.4.0。

您可以在MavenRepository http://mvnrepository.com/artifact/net.java.dev.jna

上找到它

感谢您的关注

答案 1 :(得分:1)

错误的第一行

Exception in thread "main" java.lang.AbstractMethodError:

几乎总是表示链接错误,您使用的是不兼容的版本。

在这种特定情况下,JNA 3.5.0中发布的platform.jar文件似乎未正确更新。