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

标签 web-applications jnlp java-web-start

我已经通过webstart-maven-plugin 部署了一个swing GUI和 JnlpDownloadServlet 到我的 web 应用程序在一个 servlet 容器(Glassfish 3.0)。
我的 GUI 类和资源与 launch.jnlp 文件一起位于我的 webapp 的 webstart 目录中的 mygui-4.8.jar 文件中。

当通过 web 浏览器中的 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://localhost:8080/myserver/webstart/mygui.jar!/icons/Find.png

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

这似乎与 jnlp 协议(protocol)中的版本处理有关。

谁能告诉我应该如何重写我的客户端代码以获取 jar 文件中的这些资源?谢谢你的帮助。

最佳答案

问题在解决!

这个问题原来是我代码中其他地方的一个错误,与 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 外的独立应用程序运行,它都可以工作。

关于web-applications - 如何使用 JnlpDownloadServlet 访问 webapp 的 webstart 目录中的 jar 内的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5031890/

相关文章:

html - 我应该为移动 Web 应用程序使用什么文档类型?

java - 运行重复的 JavaWS 应用程序

java - 不用jdk就可以登录java web start吗?

java - 启动 Java Web 启动时检查更新

java - 从另一个应用程序启动 Java 应用程序

java - java程序在eclipse IDE中编译错误

java - Web 开发 - 异步与同步

database-design - 大型 Web 应用程序的数据库架构

java - jnlp 中的 jar 资源未由同一证书签名

java - 使用旧小程序中的deployjava.js 添加参数