1

我试图重现尝试捕获以下窗口的尝试: Java - Window Image (2 years old post)

我正在使用 JNA 3.5.0 并在 XP 和 7 下使用 jre 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 的链接或资源(没有找到很多),请发布它们:)

提前致谢 !

4

2 回答 2

1

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

你可以在 MavenRepository http://mvnrepository.com/artifact/net.java.dev.jna上找到它

感谢您的关注

于 2012-10-27T04:50:11.250 回答
1

第一行错误

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

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

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

于 2012-10-27T16:26:35.433 回答