首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JXMapKit/-查看器的速度非常慢,因为它是可启动的--从哪里开始挖掘呢?

JXMapKit/-查看器的速度非常慢,因为它是可启动的--从哪里开始挖掘呢?
EN

Stack Overflow用户
提问于 2013-04-09 14:31:56
回答 1查看 400关注 0票数 7

只是尝试在整个摇摆实验室演示中添加一些swingx组件,并注意到与本地加载相比,简单的JXMapKit/-Viewer加载万维网中的块要慢几个数量级。

我不知道该从哪里开始查找(用户界面更新似乎在EDT上,尽管可能需要更仔细地查看):

  • 还有人经历过不同的装载时间吗?
  • 知道原因是什么吗?
  • 如何调试一个webstartable?

代码非常简单(要在本地运行,您需要荡秋千

代码语言:javascript
复制
public class WSDemo {

    private JComponent createContent() {
        JComponent content = new JPanel();
        content.setLayout(new BorderLayout());

        content.add(createMapKit()); 
        return content;
    }

    protected JComponent createMapKit() {
        final int max = 17;
        TileFactoryInfo info = new TileFactoryInfo(1, max - 2, max, 256, true,
                true, // tile size is 256 and x/y orientation is normal
                "http://tile.openstreetmap.org",// 5/15/10.png",
                "x", "y", "z") {
            public String getTileUrl(int x, int y, int zoom) {
                zoom = max - zoom;
                String url = this.baseURL + "/" + zoom + "/" + x + "/" + y
                        + ".png";
                return url;
            }

        };
        DefaultTileFactory tf = new DefaultTileFactory(info);
        tf.setThreadPoolSize(1);
        final JXMapKit kit = new JXMapKit();
        kit.setTileFactory(tf);
        kit.setZoom(10);
        kit.setAddressLocation(new GeoPosition(51.5, 0));
        kit.getMainMap().setDrawTileBorders(true);
        return kit;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new JFrame("");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new WSDemo().createContent());
                frame.setLocationByPlatform(true);
                frame.setSize(400, 400);
                frame.setVisible(true);
            }
        });
    }

}

编辑

这似乎与web上下文中的权限检查有关:分析显示整个连接调用堆栈是不同的(不太令人惊讶),需要很长时间。暂时放弃..。

编辑2

似乎有两个独立的问题

  • 打开连接在受安全限制的上下文中加载瓷砖所需的时间越长,这是JavaWebStartSecurity.checkConnect(String,int)中的热点,@Howard已经注意到了这一点。
  • 对EDT的一个相当奇怪的阻塞,似乎只有当mapKit被用于SingleFrameApplication ( BSAF)时才会发生。

若要再现阻塞,请运行SimpleWSDemoApp,直到地图可见(这是第一个问题),然后使用鼠标快速上下移动缩放拇指: ui完全阻塞。在普通帧(顶部的引用)上做同样的操作有初始加载等待,但无法再现阻塞。

奇怪的事情(对我来说)是什么阻止了EDT,从VisualVM的线程转储:

代码语言:javascript
复制
"AWT-EventQueue-0" prio=6 tid=0x063d3000 nid=0x1468 waiting for monitor entry [0x05efe000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at java.security.Permissions.implies(Unknown Source)
    - waiting to lock <0x29f7b118> (a java.security.Permissions)
    at sun.security.provider.PolicyFile.implies(Unknown Source)
    at java.security.ProtectionDomain.implies(Unknown Source)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkSystemClipboardAccess(Unknown Source)
    at java.awt.event.InputEvent.canAccessSystemClipboard(Unknown Source)
    at java.awt.event.InputEvent.<init>(Unknown Source)
    at java.awt.event.MouseEvent.<init>(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)

拖拽鼠标启动检查剪贴板访问权限.

EN

回答 1

Stack Overflow用户

发布于 2013-04-09 15:34:27

Web应用程序也是一个JVM进程,因此您可以尝试使用VisualVM来分析它(这个条目描述了如何做到这一点)。还应该使用VisualVM分析这两个应用程序,并比较堆大小、JIT编译器差异等JVM设置。我认为Web应用程序使用客户端编译器运行,通过生成本机代码比服务器编译器运行速度慢。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15904759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档