2011-02-17 30 views
4

我已經通過webstart-maven-plugin和JnlpDownloadServlet將servlet容器(Glassfish 3.0)中的webapp部署到了swing GUI。 我的GUI類和資源位於我的webapp的webstart目錄以及launch.jnlp文件中的mygui-4.8.jar文件中。如何使用JnlpDownloadServlet訪問webapp的webstart目錄內的jar中的資源

該應用程序能夠啓動罰款時,其launch.jnlp URL訪問web瀏覽器:

http://localhost:8080/myserver/webstart/launch.jnlp

然而,當我的web應用程序代碼試圖訪問的圖像資源,它是mygui內-4.8.jar文件無法檢索它。 。

我在GUI用於獲取圖標的代碼是:

URL iconURL =的getClass()getClassLoader()的getResource( 「/圖標/ Find.png」);

使用調試器我看到iconURL.toString()將返回以下網址:

罐子:HTTP://本地主機:8080/myserver的/在webstart/mygui.jar /icons/Find.png

我注意到jar文件名缺少版本(是mygui.jar而不是mygui-4.8.jar)。

這似乎與jnlp協議中的版本處理有關。

任何人都可以告訴我應該如何重寫客戶端代碼以獲取jar文件中的這些資源嗎?謝謝你的幫助。

+0

我建議您使用JaNeLA(http://pscode.org/janela/)檢查JNLP文件(和主要資源)。 – 2011-02-17 16:57:11

回答

2

問題解決!

問題原來是我的代碼中的其他地方的錯誤,與webstart,jnlp或JnlpDownloadServlet無關。在構建過程中意外預處理圖像資源的方式存在缺陷,並因此導致了損壞。

引用資源的正確方法是我怎麼過的最初如下:

String icon = "icons/Find.png"; //Notice no leading '/' 
URL url = getClass().getClassLoader().getResource(icon);    
ImageIcon imageIcon = new ImageIcon(url); 

上面的代碼工作正常時,資源是在webapp的Webstart的目錄罐內。如果在類路徑中找到它作爲本地文件,它也可以正常工作。無論應用程序是在javaws中運行還是作爲javaws外部的獨立應用程序,它都可以工作。