gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:12:54 25 4
gpt4 key购买 nike

我已经通过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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com