Google Maps API可在Eclipse中使用,而不是在导出为JAR时使用

时间:2016-02-11 14:18:33

标签: java eclipse google-maps javafx jar

注意:问题似乎与访问资源无关。尝试访问相关资源时,不会抛出异常或发出警告。我花了两天时间来解决这个问题,现在这个问题是当你搜索“javafx谷歌地图确实+无法在JAR中工作”时谷歌的第一个和第二个问题。

我有一个在Eclipse中工作的项目,但在导出为JAR时却没有。它使用JRE 1.8.0_65,JavaFX,GMapsFX,并引用javax.json-1.0.4.jar库。我在Mac上运行OS X 10.9.5。

该项目重新创建了Google Map的一些路径查找功能。它使用了一个使用JavaFX构建的GUI和与Google Maps连接的GMapsFX。

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

在Eclipse中运行时使用截图:

working

导出为JAR后无效的屏幕截图:

not working

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

因此,问题是JAR不是显示交互式Google地图和由应放置在Google地图上的数据文件构建的标记。为什么???

加载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。

在将项目作为可运行的JAR从Eclipse导出时,我尝试了三个选项中的每一个来包含引用的库,并且我在导出构建路径中包含了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

这些错误来自于我点击“显示路线”时弹出的警告框,没有选择开始或停止,并且似乎与谷歌地图没有显示有关。

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

任何想法是什么问题?如果它有用,我可以提供更多细节和一些代码。谢谢!

1 个答案:

答案 0 :(得分:0)

我想这不符合评论。 我的类似程序的项目结构是这样的:

    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.