使用com sun JNA进行截屏的问题:未定义的符号:GetDesktopWindow

时间:2017-06-01 10:57:20

标签: java ubuntu jna

我正在开发一个网站,我必须构建一个模块来捕获点击事件的网页屏幕。我在SO中引用了几篇帖子,我尝试使用Robot(java.awt.Robot)和JNA(com.sun.jna。*)以及我在本地计算机或本地tomcat服务器上尝试时成功的两种情况。它确实捕获了网页,我正在使用Java 1.7

当我在Ubuntu(Ubuntu 14.04.4)中部署代码时,我开始在这两种情况下都遇到了挑战。

使用JNA,我不断获得如下所述的异常。仅供参考,我已经提到了我在Ubuntu中使用的Java版本。我确信这与配置有关,或者我不确定系统是否正确选择了我的Java版本。任何指导都会有所帮助。我通过互联网提到但没有找到解决这个问题的任何指导

我使用的Java版本是javac 1.7.0_131(java-7-openjdk-amd64)

java.lang.UnsatisfiedLinkError: Error looking up function 'GetDesktopWindow': /usr/lib/jvm/default-java/bin/java: undefined symbol: GetDesktopWindow
    at com.sun.jna.Function.<init>(Function.java:212) ~[jna-4.2.2.jar:4.2.2 (b0)]
    at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:541) ~[jna-4.2.2.jar:4.2.2 (b0)]
    at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:518) ~[jna-4.2.2.jar:4.2.2 (b0)]
    at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:504) ~[jna-4.2.2.jar:4.2.2 (b0)]
    at com.sun.jna.Library$Handler.invoke(Library.java:220) ~[jna-4.2.2.jar:4.2.2 (b0)]
    at com.boot.service.$Proxy118.GetDesktopWindow(Unknown Source) ~[na:na]
    at com.boot.service.AuditService.getScreenshot(AuditService.java:133) ~[AuditService.class:na]
    at com.boot.service.AuditService.captureScreen(AuditService.java:118) ~[AuditService.class:na]
    at com.boot.service.AuditService.captureScreenshotAndStore(AuditService.java:66) ~[AuditService.class:na]
    at com.boot.controller.AuditController.captureScreenshotAndStore(AuditController.java:38) ~[AuditController.class:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_131]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_131]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_131]
    at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_131]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) ~[spring-web-4.3.3.RELEASE.jar:4.3.3.RELEASE]

当我列出我的JVM文件夹时,这些是我看到的不同版本的Java, default-java java-1.7.0-openjdk-amd64 java-7-openjdk-amd64 java-7-oracle java-8-oracle

使用Robot,它在我的本地运行良好,但在Ubuntu中失败,出现以下错误。

java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit
    at java.lang.Class.forName0(Native Method) ~[na:1.7.0_131]
    at java.lang.Class.forName(Class.java:195) ~[na:1.7.0_131]
    at java.awt.Toolkit$2.run(Toolkit.java:869) ~[na:1.7.0_131]
    at java.security.AccessController.doPrivileged(Native Method) ~[na:1.7.0_131]
    at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:861) ~[na:1.7.0_131]

我提到了一些要求将无头变量更新为true的帖子。我正在使用Spring启动,不知道如何设置,但我做了System.setProperty(“java.awt.headless”,“false”);作为服务构造函数的一部分。它没有任何帮助

1 个答案:

答案 0 :(得分:1)

GetDesktopWindow函数是Microsoft Windows API的一部分。在Linux环境中运行它将无法正常工作。我相信它适用于您的计算机,因为您的PC是Microsoft Windows操作系统。

完成您要求的

There is an OS independent solution, here on SO