Javafx webEngine方法'executeScript'在Java中没有按预期工作

时间:2013-05-26 18:09:45

标签: java javafx-2

我希望我能够正确描述我的问题。

我正在使用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();

时使用Platform.runLater

您可以直接使用MyBrowser.webEngine.executeScript("addJFCmarker()");代替putMarker()功能。

0 个答案:

没有答案