我正在无头linux机器上运行一些单元测试,但是Xvfb服务器启动了。 浏览器已创建,但似乎显示它有问题 - 请参阅异常。
03:53:39 INFO: OS name: Linux
03:53:39 INFO: JRE version: 1.8.0_31 64-bit
03:53:39 INFO: JxBrowser version: 6.4
03:53:39 INFO: JxBrowser type: HEAVYWEIGHT
我的代码与此类似
Frame frame = new JFrame("myFrame");
Browser browser = new Browser();
BrowserView view = new BrowserView(browser);
frame.add(view, BorderLayout.CENTER);
frame.setVisible(true);
在Windows环境下工作正常,但在Linux上我收到以下错误
Caused by: java.lang.RuntimeException: java.lang.NoSuchMethodException: getWindow
at com.teamdev.jxbrowser.chromium.internal.ReflectionUtil.invokeMethod(Unknown Source)
at com.teamdev.jxbrowser.chromium.swing.internal.NativeLinux.getWindowHandle(Unknown Source)
at com.teamdev.jxbrowser.chromium.swing.internal.HeavyWeightWidget.a(Unknown Source)
at com.teamdev.jxbrowser.chromium.swing.internal.HeavyWeightWidget.b(Unknown Source)
at com.teamdev.jxbrowser.chromium.swing.internal.HeavyWeightWidget$d.hierarchyChanged(Unknown Source)
at java.awt.Component.processHierarchyEvent(Component.java:6692)
at java.awt.Component.processEvent(Component.java:6311)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4881)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.Component.createHierarchyEvents(Component.java:5541)
at java.awt.Container.createHierarchyEvents(Container.java:1443)
at java.awt.Container.createHierarchyEvents(Container.java:1439)
at java.awt.Container.createHierarchyEvents(Container.java:1439)
at java.awt.Container.createHierarchyEvents(Container.java:1439)
at java.awt.Container.createHierarchyEvents(Container.java:1439)
at java.awt.Container.createHierarchyEvents(Container.java:1439)
at java.awt.Component.show(Component.java:1622)
at java.awt.Window.show(Window.java:1042)
我的lib文件夹中包含以下内容
并在我的测试的build.xml中
<fileset dir="${myproject.dir}/lib">
<include name="**/*.jar"/>
<exclude name="**/jxbrowser-mac*.jar"/>
<exclude name="**/jxbrowser-win*.jar"/>
</fileset>
有什么建议吗?
答案 0 :(得分:0)
默认情况下,JxBrowser在重量级渲染模式下运行。在此模式下,我们将一个本机窗口嵌入到您的Java应用程序窗口中,并配置Chromium引擎以使用GPU将内容呈现到此本机窗口中。为了嵌入本机窗口,我们需要获得Java应用程序中顶级窗口的句柄。您看到的异常表明JxBrowser无法获得该句柄。你使用什么Linux发行版?
您提到在无头Linux环境中使用JxBrowser。在这种情况下,您不需要创建BrowserView实例并将其嵌入到JFrame中,这样就可以解决问题。
此外,您可以在轻量级渲染模式下使用JxBrowser,它不需要窗口句柄:
Browser browser = new Browser(BrowserType.LIGHTWEIGHT);