java - Google Maps API 在 Eclipse 中工作,但在导出为 JAR 时无法工作

标签 java eclipse google-maps javafx jar

注意:问题似乎不在于访问资源。尝试访问相关资源时不会引发异常或发出警告。我花了两天时间来解决这个问题,现在当您搜索“javafx google map does +not work in JAR”时,这个问题是 Google 上的第一个和第二个搜索结果。

我有一个项目可以在 Eclipse 中运行,但在导出为 JAR 时不能运行。它使用 JRE 1.8.0_65、JavaFX、GMapsFX,并引用 javax.json-1.0.4.jar 库。我使用的是运行 OS X 10.9.5 的 Mac。

该项目是对 Google map 部分路径查找功能的重新创建。它使用由 JavaFX 和 GMapsFX 构建的 GUI,可与 Google map 交互。

当我将项目导出为 JAR 并运行该 JAR 时,GUI 中专门用于显示 Google map 并允许用户选择要添加到路径的位置标记的部分中没有出现任何内容。请注意,交互式 Google map 应在启动时出现,然后在用户加载一些数据后添加标记。以下是一些截图以供说明:

在 Eclipse 中运行时的工作截图:

working

导出为 JAR 后无法正常工作的屏幕截图:

not working

Google Map API 的 URL 位于项目中名为“index.html”的文件中。我测试过,JAR 正确加载了这个文件。此外,JAR 正确加载数据文件并创建标记对象以根据这些数据文件添加到显示中。

因此,问题是 JAR 没有显示交互式 Google map 以及根据应放置在 Google map 上的数据文件构建的标记。为什么???

加载 Goole map 的逻辑框架如下所示:

GoogleMapView mapComponent =
   (
    webview = new WebView();
    webengine = new JavaFxWebEngine(webview.getEngine());
    JavascriptRuntime.setDefaultWebEngine(webengine);
    webengine.getLoadWorker()[etc];
    webengine.load(getClass().getResource(htmlFile).toExternalForm()); // the variable "htmlFile" is "/html/index.html" and seems to be access properly by both Eclipse and the JAR.
   )
mapComponent.addMapInitializedListener(); 
[the mapComponent is initialized and so the mapInitilized() function fires]
MapOptions options = [some options to pass the GoogleMap constructor, such as a zoom level and a center]
GoogleMap map = mapComponent.createMap(options);

此时,Eclipse 项目显示带有给定选项的 Google map ,而 JAR 版本则显示空白区域,其中应该有带有给定选项的 Google map 。

在从 Eclipse 将项目导出为可运行的 JAR 时,我已经尝试了包含引用库的三个选项,并且我已在导出构建路径中包含了 JRE 运行时库和 javax.json 引用库。

无论我做什么或单击哪里,运行 JAR 时遇到的唯一错误如下:

com.sun.javafx.css.StyleManager getCachedImage
WARNING: Error loading image: rsrc:dialog-error.png
com.sun.javafx.css.StyleManager getCachedImage
WARNING: Error loading image: rsrc:dialog-information.png

这些错误来自于当我在未选择起点或终点的情况下单击“显示路线”时弹出的警告框,并且这些错误似乎与 Google map 未显示无关。

这里是 GitHub 存储库的链接,您可以在其中检查整个代码:https://github.com/ToolsForInsight/GraphSearch

有什么想法吗?如果有帮助的话,我可以提供更多详细信息和一些代码。谢谢!

最佳答案

我想这不适合评论。 我的模拟程序的项目结构如下:

    C:.
    └───src
        ├───main
        │   ├───java
        │   │   └───com
        │   │       └───domain
        │   │           └───d3project
        │   │               └───adapter
        │   └───resources
        │       └───com
        │           └───domain
        │               └───d3project
        │                   ├───JavaScript
        │                   ├───JSON
        │                   ├───pictures
        │                   ├───index.html 
//                                ^  index in resource folder                             
        │                   └───Styles
        │                       └───images
        └───test
            └───java
                └───com
                    └───domain
                        └───d3project
                            └───adapter

src/main下,我有一个文件夹javaresources,只要它们具有相同的包,我就可以像这样加载我的index.html:

webView = new WebView();
webEngine = webView.getEngine();
try {
    webEngine.load(getClass().getResource("index.html").toExternalForm());
} catch (Exception e) {
     e.printStackTrace();
}

我不知道这是否能解决您的问题或以任何方式提供帮助,但这是我在设置项目时遇到的问题之一。 This helped me.

关于java - Google Maps API 在 Eclipse 中工作,但在导出为 JAR 时无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35341779/

相关文章:

java - Android Studio 更新位置时位置标记消失

java - Spring Boot中分布式任务调度和Job队列的建议

java - 如何正确使用任何 Java API

java - 使用 Java 通过暴力计算多项式

java - eclipse - 来自表的 JPA 实体,未列出模式

android - 无法解析 'adb version' 的输出?

ruby-on-rails - 将 Google Maps (API V3) 支持添加到 Ruby on Rails 应用程序

javascript - 如何使用 JavaScript 在 google map (1 个或多个)中绘制形状

java - 构造函数中的 StackOverflowError 异常

java - SecurityContextHolder.getContext().getAuthentication() 返回 String