2013-11-03 55 views
1

所以我試圖在用java編寫的桌面應用程序中實現谷歌地圖。 事實證明,這是一項比我想象的更困難的任務,尤其是我缺乏技能。 我以前從未提交過任何問題,但我會盡力按照我在研究中看到的方式完成。從java發送字符串到javascript時,「無法找到變量」。

這是我的java類:

package GUI; 

import java.net.URL; 

import javafx.application.Application; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.layout.HBox; 
import javafx.scene.layout.Region; 
import javafx.scene.web.WebEngine; 
import javafx.scene.web.WebEvent; 
import javafx.scene.web.WebView; 
import javafx.stage.Stage; 

public class JavaFXGoogleMaps extends Application { 

    private Scene scene; 
    MyBrowser myBrowser; 

    @Override 
    public void start(Stage primaryStage) { 
     primaryStage.setTitle("SHEEPTRACKER3000"); 
     primaryStage.setWidth(400); 
     primaryStage.setHeight(300); 
     myBrowser = new MyBrowser(); 
     scene = new Scene(myBrowser, 400, 300); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 

    } 

    public static void main(String[] args) { 
     launch(args); 

    } 

    static class MyBrowser extends Region { 
     HBox toolbar; 

     static WebView webView = new WebView(); 
     static WebEngine webEngine = webView.getEngine(); 

     public MyBrowser() { 

      final URL urlGoogleMaps = getClass().getResource(
        "GoogleMapsV3.html"); 
      webEngine.load(urlGoogleMaps.toExternalForm()); 
      webEngine.setJavaScriptEnabled(true); 
      getChildren().add(webView); 

      webEngine.setOnAlert(new EventHandler<WebEvent<String>>() { 

       @Override 
       public void handle(WebEvent<String> arg0) { 

        System.out.println("We are here"); 
        webEngine 
          .executeScript("document.getElementById('test').innerHTML = 'the new text';"); 
        webEngine.executeScript("document.setNewMarker()"); 
        webEngine 
          .executeScript("document.setNewMarkerWithParameters(nAME-63.44-10.39)"); 
        // webEngine.load(urlGoogleMaps.toExternalForm()); 
        // getChildren().add(webView); 

       } 

      }); 

     } 
    } 
} 

這裏是我的html文件:

<!DOCTYPE html> 
<html> 
    <head> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
    <style type="text/css"> 
     html { height: 100% } 
     body { height: 100%; margin: 0; padding: 0 } 
     #map_canvas { height: 100% } 
    </style> 
    <script type="text/javascript" 
     src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAGiYaSPuB9Mx2t37gy9yhUR_QOUwdTWE0&sensor=false"> 
    </script> 
    <script type="text/javascript"> 
     function initialize() { 
     var myCenter = new google.maps.LatLng(63.43,10.39) 
     var mapOptions = { 
      center: myCenter, 
      zoom: 13, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
      }; 

     map = new google.maps.Map(document.getElementById("map_canvas"), 
      mapOptions); 
     var tilesloaded=true; 
     google.maps.event.addListenerOnce(map, 'tilesloaded', function(){ 
      if(tilesloaded ==true){ 
      window.alert(); 
      tilesloaded=false; 
      } 
     }); 
     } 
    document.setNewMarker = function setNewMarker(){ 
     var marker=new google.maps.Marker({ 
       position:new google.maps.LatLng(63.43,10.39), 
       icon:'sheep1.png', 
       map:map, 
       }); 

    } 
    document.setNewMarkerWithParameters = function setNewMarkerWithParameters(info){ 
     var array = info.split('-'); 
     var a = array[0], b = array[1], c = array[2]; 
     var lat = parseFloat(b); 
     var longi = parseFloat(c); 
     var name = parseString(a); 
     var marker=new google.maps.Marker({ 
       position:new google.maps.LatLng(lat,longi), 
       icon:'sheep1.png', 
       map:map, 
       }); 

    } 
    google.maps.event.addDomListener(window, 'load', initialize); 
    </script> 
    </head> 
    <body> 
    <h1 id="test"> Does dis work?</h1> 
    <div id="map_canvas" style="width:400px; height:300px"></div> 
    </body> 
</html> 

我一直在這一點上有一段時間了,在學校的項目限期關閉 我收到錯誤信息「無法找到變量名」,我不明白這是什麼意思。爲了把它放在上下文中,我試圖在java中創建一個函數,其中我遍歷表單[name-lat-long]上的一個數組並添加標記到地圖。但是,我無法到達那裏,因爲我得到的錯誤。名稱變量尚未使用,因爲我試圖在繼續之前使代碼的這部分工作。但後來我希望能夠點擊標記並在該位置找到對象的名稱。 任何反饋都將不勝感激。

+1

*你在哪裏「得到錯誤信息」?在你的Java代碼中? Javascript? –

回答

1

在這一行:

webEngine 
    .executeScript("document.setNewMarkerWithParameters(nAME-63.44-10.39)"); 

... you'e告訴發動機以執行document.setNewMarkerWithParameters函數,傳遞在該表達式的結果:

nAME 
- 63.44 
- 10.39

例如,可變nAME減去這兩個浮點數。我猜你沒有在任何地方定義變量nAME

但是在你的函數中,看起來你期待它是一個字符串。如果是這樣的:

webEngine 
    .executeScript("document.setNewMarkerWithParameters('nAME-63.44-10.39')"); 
// Note the quotes -------------------------------------^----------------^ 
+0

非常感謝!這解決了我的問題:)這是最小的事情,讓你:P –

0

你也需要更換

var name = parseString(a); 

var name = a; 

分裂反正據我所知parseString確實返回一個字符串不是Java腳本exsits(如果你需要使用toString())

我acutally能夠運行這樣的代碼(使用TJ Crowder提出如此並刪除parseString)

+0

謝謝你指出,我實際上意識到,我剛剛忘記刪除它:) –