2014-07-09 71 views
2

我正在編寫一個程序,在JavaFX應用程序中顯示Google Map。下面是一個代碼:JavaFX與谷歌地圖 - 檢測出傑出的資源鎖定:D3D Vram池:

public class Window { 

    private static JFXPanel fxContainer; 
    MyBrowser myBrowser; 
    double lat; 
    double lon; 
    WindowGPSServer windowsgpsserver; 



    public static void main(String[] args) throws IOException { 

     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 

       new Window().init(); 
      } 
     }); 

    } 

    public void init() { 
     fxContainer = new JFXPanel(); 
     windowsgpsserver = new WindowGPSServer(fxContainer); 
     windowsgpsserver.setVisible(true); 

    // create JavaFX scene 

     Platform.runLater(new Runnable() { 
     @Override 
     public void run() { 
     //javaFX operations should go here 
      createScene(); 
     } 
     }); 

    } 
    private void createScene() { 
     myBrowser = new MyBrowser(); 
     myBrowser.setCache(false); 
     Scene scene = new Scene(myBrowser); 

     fxContainer.setScene(scene); 
     this.windowsgpsserver.setMyBrowser(myBrowser); 
    } 
} 

和:

public class MyBrowser extends Pane { 
double lat; 
double lon; 
MyBrowser myBrowser; 
WebView webView = new WebView(); 
WebEngine webEngine = webView.getEngine(); 


    public MyBrowser() { 
     Toolkit tk = Toolkit.getDefaultToolkit(); 
     int xSize = ((int) (tk.getScreenSize().getWidth())); 
     int ySize = ((int) tk.getScreenSize().getHeight()); 
     xSize= new Double(xSize*0.75).intValue(); 
     ySize= new Double(ySize*0.90).intValue(); 

     webView.setPrefSize(xSize, ySize); 
     final URL urlGoogleMaps = getClass().getResource("demo.html"); 

     webEngine.load(urlGoogleMaps.toExternalForm()); 
     webEngine.setOnAlert(new EventHandler<WebEvent<String>>() { 
      @Override 
      public void handle(WebEvent<String> e) { 
       System.out.println(e.toString()); 
       System.out.println(e.getData()); 
       System.gc(); 
      } 
     }); 

     getChildren().add(webView); 

    } 
    public void ChangeLocation(String latit, String longi) { 
     lat = Double.parseDouble(latit); 
     lon = Double.parseDouble(longi); 
     webEngine.executeScript("" + 
        "window.lat = " + lat + ";" + 
        "window.lon = " + lon + ";" + 
        "document.goToLocation(window.lat, window.lon);" 
     ); 
    }  
} 

和demo.html文件:

<body style="height: 100%;" onload="mapaStart()"> 


    <script type="text/javascript"> 
    var map; 
    function mapaStart() { 
     //document.map = new google.maps.Map(document.getElementById("mapcanvas")); 
     var latlng = new google.maps.LatLng(35.857908, 10.598997); 
     var Options = { 
      zoom: 15, 
      center: latlng, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }; 
     map = new google.maps.Map(document.getElementById("mapcanvas"), Options); 
     //var carMarkerImage = new google.maps.MarkerImage('resources/images/car.png'); 
     var marker = new google.maps.Marker({ 
      position: new google.maps.LatLng(35.857908, 10.598997), 
      map: map, 
      draggable: false, 
    //icon: carMarkerImage, 
      title: "", 
      autoPan: true 

     }); 
     var infobulle = new google.maps.InfoWindow({ 
      content: "Aktualna pozycja" 
     }); 
     google.maps.event.addListener(marker, 'mouseover', function() { 
      infobulle.open(map, marker); 
     }); 


     document.goToLocation = function(x, y) { 
      alert("goToLocation, x: " + x +", y:" + y); 
      var latLng = new google.maps.LatLng(x, y); 
      marker.setPosition(latLng); 
      map.setCenter(latLng); 
     } 
    google.maps.event.addListener(map, 'zoom_changed', function() { 
      alert("ZOOM"); 
     var MapOptions = { 
        scrollwheel: false 
      }; 
     map.setOptions(MapOptions) 
      setTimeout(aaa, 1000); 

    }); 

    } 
    function aaa() { 
      var MapOptions = { 
        scrollwheel: true 
      }; 
     map.setOptions(MapOptions) 

    } 
    </script> 

<div id="mapcanvas" style="width: 100%; height: 90%; border: 1px solid black; background: gray;"> 

</div> 
</body> 
</html> 

fxContainer添加到JPanel並在Swing應用程序中顯示。 啓動程序後,一切正常。但是在放大和縮小几次之後,程序變得沒有反應(難以縮放,將地圖移動到兩邊),並顯示以下錯誤:

「檢測到的突出資源鎖: D3D Vram池:268 433 488 used( 100,0%),268 433 488管理(100,0%),268 435 456總計 39總資源管理 平均資源年齡爲0.1幀 0資源支持最大年齡(0,000000) 35資源標記永久(89,700000) 2資源有不匹配的鎖(5,100000) 2資源鎖定(5,100000) 35資源包含有趣的數據(89,700000) 0資源消失(0,000000)「

任何人都可以幫我解決這個問題嗎?

謝謝

馬丁

+0

請嘗試最新的[Java 8 build](https://jdk8.java.net/download.html),如果仍然存在問題,請[登錄bug](https://javafx-jira.kenai .COM)。 – jewelsea

+1

我正在使用最新的java8 jdk,但它在放大和縮小一段時間後會掛起。我認爲它可能是圖形內存的東西,但我不知道要做什麼。 – user3821676

+0

我的猜測是它是[已知問題](https://javafx-jira.kenai.com/issues/?jql=text%20~%20%22D3D%20Vram%20Pool%22%20ORDER%20BY%20updated %20DESC)。搜索我列出的鏈接(任何人都可以創建一個帳戶並在提供的鏈接上登錄到JavaFX問題跟蹤器中),並且如果它看起來像您的是對現有問題的重複,贊成或評論(可能有也可能沒有解決方法說明) ,否則創建一個新問題。 – jewelsea

回答