2013-04-09 33 views
7

只是試圖將一些swingx-ws組件添加到整個swinglabs演示中,並注意到與在本地加載相比,簡單的JXMapKit/-Viewer比webstartable加載瓷磚要慢幾個數量級。JXMapKit/-Viewer極其緩慢,因爲webstartable - 從哪裏開始挖掘?

而失去了,我應該開始尋找(UI更新似乎是在美國東部時間,但可能需要仔細看看):

  • 任何人經歷不同的加載時間?
  • 任何猜測可能是什麼原因?
  • 如何調試webstartable?

的代碼是相當簡單的(在本地運行,你需要swingx and swingx-ws

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); 
      } 
     }); 
    } 

} 

編輯

好像它主題相關的許可在網絡方面檢查:性能分析表明,整個連接調用堆棧是不同的(不過分令人驚訝),並且需要很長時間。現在放棄...

編輯2

似乎有是2個獨立的問題

  • 才能打開連接在安全限制範圍內裝載瓷磚稍長的時間,也就是在JavaWebStartSecurity熱點。 checkConnect(String,int),因爲@Howard已經注意到了。
  • 的EDT的一個相當怪異的封鎖,似乎只發生,如果mapKit在

(的BSAF)一SingleFrameApplication用於重現阻塞,運行SimpleWSDemoApp,等到地圖上是可見的(需要有時候,這是第一個問題),然後使用鼠標快速上下移動縮放大拇指:UI完全被阻塞。在普通框架(頂部的參考)上做同樣的事情有最初的加載等待,但不能再現阻塞。

怪異啄(對我來說)是什麼阻止EDT,從VisualVM的的線程轉儲:

"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) 

被拖動鼠標踢檢查權限剪貼板訪問...

+2

VisualVM的顯示我'JavaWebStartSecurity.checkConnect(字符串,整數)'和有'getHostByAddr(字節[])內'一個極端的熱點。你能證實這種行爲嗎? – Howard 2013-04-09 15:48:42

+0

@Howard - 將檢查,感謝 – kleopatra 2013-04-09 15:50:02

+0

@Howard驗證 - 和不知道如何解決它.. – kleopatra 2013-04-10 13:24:13

回答

3

Web Start應用程序也是一個JVM進程,因此您可以嘗試使用VisualVM進行配置文件(本條目描述如何執行此操作)。使用VisualVM分析這兩個應用程序並比較JVM設置(如堆大小,JIT編譯器差異)也是值得的。我認爲Web Start應用程序與客戶端編譯器一起運行,通過生成的本地代碼比使用服務器編譯器更慢。

+0

visualVM在挖土方面真的很有幫助,希望我有多於一個upvote for this pointer :-) – kleopatra 2013-04-12 11:31:40