使用 com sun JNA 的屏幕捕获问题:未定义的符号:GetDesktopWindow
Issues with screen capture using com sun JNA : undefined symbol: GetDesktopWindow
我在一个网站上工作,我必须在该网站上构建一个模块以在单击事件时捕获网页屏幕。我在 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 我看到的不同版本,
默认-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.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]
我提到了一些要求将 headless 变量更新为 true 的帖子。我正在使用 Spring 引导,但不确定如何设置,但我设置了 System.setProperty("java.awt.headless", "false");作为服务构造函数的一部分。它也没有帮助
GetDesktopWindow
函数是 Microsoft Windows API 的一部分。 运行 它在 Linux 环境中不起作用。我相信它可以在你的机器上运行,因为你的 PC 是 Microsoft Windows OS.
There is an OS independent solution, here on SO 满足您的要求。
我在一个网站上工作,我必须在该网站上构建一个模块以在单击事件时捕获网页屏幕。我在 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 我看到的不同版本, 默认-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.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]
我提到了一些要求将 headless 变量更新为 true 的帖子。我正在使用 Spring 引导,但不确定如何设置,但我设置了 System.setProperty("java.awt.headless", "false");作为服务构造函数的一部分。它也没有帮助
GetDesktopWindow
函数是 Microsoft Windows API 的一部分。 运行 它在 Linux 环境中不起作用。我相信它可以在你的机器上运行,因为你的 PC 是 Microsoft Windows OS.
There is an OS independent solution, here on SO 满足您的要求。