【问题标题】:JavaFX with Google Maps - Outstanding resource locks detected: D3D Vram Pool:带有 Google 地图的 JavaFX - 检测到未完成的资源锁:D3D Vram 池:
【发布时间】:2014-07-09 18:35:41
【问题描述】:

我正在编写一个在 JavaFX 应用程序中显示 Google 地图的程序。下面是一段代码:

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 (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,如果仍然存在问题,log a bug
  • 我正在使用最新的 java8 jdk,但它在放大和缩小片刻后挂起。我认为这可能与图形内存有关,但我不知道该怎么做。
  • 我猜是known issue。搜索我列出的链接(任何人都可以创建一个帐户并在提供的链接上登录 JavaFX 问题跟踪器),如果它看起来像您的重复,请对现有问题进行投票或评论(可能有也可能没有解决方法说明) ,否则创建一个新问题。

标签: resources javafx maps locks


【解决方案1】:

这是一个已知问题。你能给这个https://javafx-jira.kenai.com/browse/RT-36649点赞吗?

谢谢! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 2011-03-05
    • 2021-04-20
    • 1970-01-01
    相关资源
    最近更新 更多