我希望我能够正确描述我的问题。
我正在使用Java程序收集JXTA消息,然后根据接收消息,在谷歌地图上的预定义位置添加标记。我正在使用JavaFx来显示放大到自定义位置的谷歌地图。我已经将HTML文件的JavaScript部分中的标记位置作为函数包含在内,因此程序知道在谷歌地图上放置哪个标记的位置,并且JavaFx代码本身也可以正常工作。
我想在我的Java程序中调用webEngine.executeScript('myJavaScriptFucntion')。我有一个用于JXTA管道的pipeMsgEvent监听器,一旦收到特定的消息,就应该调用适当的webEngine.executeScript('myJavaScriptFucntion')并在运行时在地图中显示一个标记。
这是我的JavaFx代码
public class JavaFX_GoogleMaps extends Application {
public Scene scene;
MyBrowser myBrowser;
public JavaFX_GoogleMaps () {
}
public static void initJavaFX_GoogleMaps () {
launch("hello");
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("My Application");
myBrowser = new MyBrowser();
scene = new Scene(myBrowser, 800, 600);
primaryStage.setScene(scene);
primaryStage.show();
}
}
class MyBrowser extends Region {
HBox toolbar;
static final WebView webView = new WebView();
static final WebEngine webEngine = webView.getEngine();
final Button button = new Button("Add Marker");
public MyBrowser() {
final URL urlGoogleMaps = getClass().getResource("googlemaps.html");
webEngine.load(urlGoogleMaps.toExternalForm());
toolbar = new HBox();
toolbar.getChildren().addAll(button);
getChildren().add(webView);
button.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent t) {
putMarker(); }});
getChildren().add(toolbar);
}
public static void putMarker() {
MyBrowser.webEngine.executeScript("addJFCmarker()");
}
}
在我的Java程序中*我先打电话
主要方法中的 JavaFX_GoogleMaps.initJavaFX_GoogleMaps();
然后在pipeMsgEvent()
方法内部调用
MyBrowser.putMarker();
当我运行程序时,没有错误,没有警告,也没有异常。程序运行正常,单独的窗口显示谷歌地图,除了在JXTA同行收到消息时,谷歌地图上没有放置标记。 (目前我对所有收到的消息都使用了putMarker方法)。我知道在我成功打印内容时收到的邮件很好。
要检查,如果我的代码有效,我在我的JavaFx代码中放置了一个按钮(添加标记),并在EventHandler中为该按钮调用了相同的putMarker()函数。当我点击按钮时,标记会按照我想要的方式显示在地图上。
很明显,当我在我的Java程序中调用putMarker()时会出现问题,尽管我没有收到任何错误,异常或警告。可能还有另一种方法可以做到这一点。
我认为当我调用MyBrowser.putMarker()方法时,会创建一个新的MyBrowser实例并调用该实例,但由于此新实例没有自己的显示窗口,因此不会显示输出。
可能是我错了,但我希望我已经解释了我的问题,所以我应该怎么做才能从Java代码中显示标记?
- 的问候,
姆兰
更新
问题解决了。只需在调用MyBrowser.putMarker();
您可以直接使用MyBrowser.webEngine.executeScript("addJFCmarker()");
代替putMarker()
功能。