Linux上的JxBrowser抛出NoSuchMethodException:getWindow

时间:2017-10-24 15:35:57

标签: linux swing jxbrowser

我正在无头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文件夹中包含以下内容

  • jxbrowser-6.4.jar
  • jxbrowser-linux64-6.4.jar
  • jxbrowser-MAC-6.4.jar
  • jxbrowser双赢-6.4.jar

并在我的测试的build.xml中

<fileset dir="${myproject.dir}/lib">
    <include name="**/*.jar"/>
    <exclude name="**/jxbrowser-mac*.jar"/>
    <exclude name="**/jxbrowser-win*.jar"/>
</fileset>

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

默认情况下,JxBrowser在重量级渲染模式下运行。在此模式下,我们将一个本机窗口嵌入到您的Java应用程序窗口中,并配置Chromium引擎以使用GPU将内容呈现到此本机窗口中。为了嵌入本机窗口,我们需要获得Java应用程序中顶级窗口的句柄。您看到的异常表明JxBrowser无法获得该句柄。你使用什么Linux发行版?

您提到在无头Linux环境中使用JxBrowser。在这种情况下,您不需要创建BrowserView实例并将其嵌入到JFrame中,这样就可以解决问题。

此外,您可以在轻量级渲染模式下使用JxBrowser,它不需要窗口句柄:

Browser browser = new Browser(BrowserType.LIGHTWEIGHT);