首页 文章

如何使用JnlpDownloadServlet访问webapp的webstart目录中的jar内的资源

提问于
浏览
4

我已经通过webstart-maven-plugin和JnlpDownloadServlet将一个swing GUI部署到一个servlet容器(Glassfish 3.0)中的webapp . 我的GUI类和资源位于mygui-4.8.jar文件中,该文件位于我的webapp的webstart目录中,同时还包含launch.jnlp文件 .

当在网络浏览器中通过launch.jnlp url访问时,该应用程序可以正常启动:

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

但是,当我的webapp中的代码尝试访问mygui-4.8.jar文件中的图像资源时,它无法检索它 .

我在GUI中用来获取图标的代码是:

URL iconURL = getClass() . getClassLoader() . getResource(“/ icons / Find.png”);

使用调试器我看到iconURL.toString()返回以下URL:

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

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

这似乎与jnlp协议中的版本处理有关 .

任何人都可以告诉我应该如何重写我的客户端代码以获取jar文件中的这些资源?谢谢你的帮助 .

1 回答

  • 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目录中的jar内时,上面的代码工作正常 . 如果在类路径中找到它作为本地文件,它也可以正常工作 . 无论应用程序是在javaws中运行还是作为javaws之外的独立应用程序运行,它都可以运行 .

相关问题