2011-02-17 28 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外部的独立应用程序,它都可以工作。