我尝试重现捕获窗口的尝试: 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的任何链接或资源(找不到很多),请发布它们:)
提前致谢!
答案 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
文件似乎未正确更新。