我正在开发一个网站,我必须构建一个模块来捕获点击事件的网页屏幕。我在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”);作为服务构造函数的一部分。它没有任何帮助
答案 0 :(得分:1)
GetDesktopWindow
函数是Microsoft Windows API的一部分。在Linux环境中运行它将无法正常工作。我相信它适用于您的计算机,因为您的PC是Microsoft Windows操作系统。