2013-04-09 22 views
7

Chỉ cố gắng thêm một số thành phần swingx-ws vào bản demo swinglabs tổng thể - và nhận thấy rằng một JXMapKit/-Viewer đơn giản là các đơn đặt hàng có cường độ chậm hơn để tải các ô trong số webstartable so với tải cục bộ.JXMapKit/-Viewer cực kỳ chậm như webstartable - nơi để bắt đầu đào?

Thay mất vào nơi tôi nên bắt đầu tìm kiếm (cập nhật ui dường như là trên EDT, mặc dù có thể cần phải xem xét kỹ hơn):

  • ai khác trải qua những thời gian tải khác nhau?
  • bất kỳ phỏng đoán nào có thể là lý do?
  • cách gỡ lỗi webstartable?

Mã này là khá đơn giản (để chạy cục bộ, bạn sẽ cần 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); 
      } 
     }); 
    } 

} 

Sửa:

có vẻ như nó bằng cách nào đó liên quan đến sự cho phép kiểm tra trong bối cảnh web: hồ sơ cho thấy rằng toàn bộ kết nối cuộc gọi ngăn xếp là khác nhau (không quá ngạc nhiên) và mất lứa tuổi .. Cho đến bây giờ ..

Chỉnh sửa 2:

Dường như có 2 vấn đề riêng biệt

  • thời gian hơi lâu hơn cần thiết để mở các kết nối cho tải gạch trong bối cảnh an ninh hạn chế, đó là điểm nóng trong JavaWebStartSecurity. checkConnect (String, int), như @Howard đã lưu ý.
  • một chặn khá lạ của EDT mà dường như chỉ xảy ra nếu mapKit được sử dụng trong một SingleFrameApplication (của BSAF)

Để tái tạo các chặn, chạy SimpleWSDemoApp, đợi cho đến khi bản đồ được hiển thị (mất một số thời gian, đó là vấn đề đầu tiên) sau đó sử dụng chuột để di chuyển ngón tay cái zoom nhanh lên và xuống: ui bị chặn hoàn toàn. Làm tương tự trên khung đồng bằng (tham chiếu trên đầu) có thời gian chờ tải ban đầu, nhưng không bao giờ có thể tạo lại quá trình chặn.

Các thingy lạ (với tôi) là những gì khối EDT, từ bãi chứa thread của 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) 

được kéo đá chuột trong việc kiểm tra sự cho phép để truy cập vào clipboard ...

+2

VisualVM chỉ cho tôi một điểm phát sóng cực bên trong 'JavaWebStartSecurity.checkConnect (String, int)' và có 'getHostByAddr (byte [])'. Bạn có thể xác minh hành vi này không? – Howard

+0

@Howard - sẽ kiểm tra, cảm ơn – kleopatra

+0

@Howard đã xác minh - và không có ý tưởng làm thế nào để có được xung quanh nó .. – kleopatra

Trả lời

3

Một ứng dụng web bắt đầu cũng là một quá trình JVM, do đó bạn có thể thử để cấu hình nó với VisualVM (mục này mô tả cách thực hiện điều đó). Nó cũng đáng để cấu hình cả hai ứng dụng với VisualVM và so sánh các thiết lập JVM như kích thước heap, sự khác biệt của trình biên dịch JIT. Tôi nghĩ rằng một ứng dụng Web Start chạy với trình biên dịch máy khách, nó chậm hơn bằng các mã nguồn gốc được sản xuất hơn là một trình biên dịch máy chủ.

+0

visualVM thực sự hữu ích trong việc đào bới trong bụi bẩn, ước gì tôi có nhiều hơn một upvote cho con trỏ này :-) – kleopatra

Các vấn đề liên quan