【问题标题】:JNA Capturing every window : java.lang.AbstractMethodErrorJNA 捕获每个窗口:java.lang.AbstractMethodError
【发布时间】:2012-10-27 02:36:01
【问题描述】:

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

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

提前致谢!

【问题讨论】:

  • 你能告诉我们更多关于你正在尝试做什么以及你用来尝试这样做的代码吗?您是否只是简单地复制代码并尝试按原样使用它?您是否尝试过使用较小的代码来查看它的作用并单独测试它?
  • 我都尝试使用原始代码并对其进行操作以了解发生了什么。对不起,但我必须准确地说我在另一篇文章中使用了检查过的答案代码。而且我不明白为什么实例化这个结构类会出现问题。
  • 您的问题本质上是,“我借用了某某代码,但它不起作用。请告诉我原因。”在您进行一些调试以尝试隔离错误之前,我认为这不是该站点的可行或可回答的问题。对不起,但我是这么看的:你的工作已经为你完成了。如果这是您编写的代码,情况会大不相同,因为您会前后理解它,并更好地了解问题出在哪里。坚持下去,你可能会解决这个问题,或者至少隔离它。
  • 没有。在询问之前,我花了几个小时在这个错误上,调试和搜索。我也许可以准确地说出我在 JNA 上下文中的问题。我会编辑我的帖子。
  • 为获得最佳结果,您应该创建并发布一个 small 独立的 JNA 程序来重现此错误。

标签: java windows jna


【解决方案1】:

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

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

感谢您的关注

【讨论】:

    【解决方案2】:

    第一行错误

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 2010-12-05
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多