我正在編寫一個程序,在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)「
任何人都可以幫我解決這個問題嗎?
謝謝
馬丁
請嘗試最新的[Java 8 build](https://jdk8.java.net/download.html),如果仍然存在問題,請[登錄bug](https://javafx-jira.kenai .COM)。 – jewelsea
我正在使用最新的java8 jdk,但它在放大和縮小一段時間後會掛起。我認爲它可能是圖形內存的東西,但我不知道要做什麼。 – user3821676
我的猜測是它是[已知問題](https://javafx-jira.kenai.com/issues/?jql=text%20~%20%22D3D%20Vram%20Pool%22%20ORDER%20BY%20updated %20DESC)。搜索我列出的鏈接(任何人都可以創建一個帳戶並在提供的鏈接上登錄到JavaFX問題跟蹤器中),並且如果它看起來像您的是對現有問題的重複,贊成或評論(可能有也可能沒有解決方法說明) ,否則創建一個新問題。 – jewelsea