JavaFX WebView 在显示 OpenLayers 地图时不准确

JavaFX WebView inaccurate when displaying OpenLayers maps

我有一个将 OpenLayers 合并到其 WebView 中的 JavaFX 应用程序。我有一个简单的弹出窗口,当您将鼠标移到某个功能上时会显示该功能的名称。我面临的问题是 WebView 内部发生的任何事情都是非常不准确的。例如,当弹出窗口被触发时,它不会在鼠标离开该功能后立即消失。我准备了一个小要点来强调这个问题 here。我在 JavaFX 中为 WebView 使用此代码:

private void initialize() {
    WebView view = new WebView();
    webEngine = view.getEngine();

    URL urlOpenLayers = getClass().getResource("/html/trainmap.html");
    webEngine.setJavaScriptEnabled(true);
    webEngine.load(urlOpenOpenLayers.toExternalForm());
}

我在这里发布了这个而不是 GIS StackExchange,因为这似乎是一个 JavaFX WebView 问题,而不是 OpenLayers 的问题。相同的代码按 Chrome.

中的预期工作

这是我调用view.getEngine().getUserAgent()时的WebView版本:Mozilla/5.0 (Linux x86_64) AppleWebKit/602.1 (KHTML, like Gecko) JavaFX/8.0 Safari/602.1

WebView 似乎正在使用 Java Graphics 2D API 来呈现网页。在 运行 一些测试之后,很明显 JavaFX 的这个组件多年没有更新,因此无法使用很多现代网络内容,如 OpenLayers。

我遇到的一个解决方案是切换到 JxBrowser,而不是 运行 在 Chromium 上。需要注意的是,JxBrowser 不是免费使用的,但是它有 30 天的试用期。

One solution I've come across is switching to JxBrowser, which is instead running on Chromium. It should be noted that JxBrowser is not free to use, but it does have a 30-day trial.

您也可以使用 JCEF (The Java Chromium Embedded Framework) to embed chromium in your application. Unfortunately it works only with AWT/Swing and it's too complicated to embed it in SwingNode - 所以如果您想使用这个库,您必须更改应用程序的结构