【发布时间】:2017-06-01 20:33:58
【问题描述】:
我正在一个网站上工作,我必须构建一个模块来捕获点击事件的网页屏幕。我在 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 boot,但不确定如何设置它,但我做了 System.setProperty("java.awt.headless", "false");作为服务构造函数的一部分。它也没有帮助
【问题讨论】: