【发布时间】:2011-02-11 16:41:41
【问题描述】:
我正在从一个 jnlp 文件运行一个应用程序,该文件包含有用的信息,例如供应商、描述和其他字段。
在运行时获取这些数据以构建“关于”对话框的最合理方法是什么?
有没有办法检测应用程序是否在没有 Java Web Start 的情况下启动?
感谢您的帮助。
皮埃尔
【问题讨论】:
-
有什么理由不能将它与 JNLP 文件一起放入应用程序并从那里获取?
我正在从一个 jnlp 文件运行一个应用程序,该文件包含有用的信息,例如供应商、描述和其他字段。
在运行时获取这些数据以构建“关于”对话框的最合理方法是什么?
有没有办法检测应用程序是否在没有 Java Web Start 的情况下启动?
感谢您的帮助。
皮埃尔
【问题讨论】:
实现预期目标有多种策略。我不会重新讨论已经提到的那些,而是概述更多。
1) 信息可以放在档案的清单中。可以使用java.lang.Package 类的方法来检索它。
String title = pckg.getImplementationTitle();
String vendor = pckg.getImplementationVendor();
String version = pckg.getImplementationVersion();
Package 类还能够识别所有加载的包。
Package[] package = Package.getPackages();
重复查找您的包,您可以获得当前加载的所有包的列表。
将信息放入清单的最佳方法是使用 Ant 或一些类似的构建工具。这样就可以将版本设置为日期 - 很容易做到。
2) 向 JNLP 的资源部分添加一个属性。
<resources>
..
<property name="jnlp.href" value="${href}" />
..
</resources>
顺便说一句,${href} 的使用意指与 JNLP href 属性使用的字符串完全相同。
使用BasicService.getCodeBase() 方法获取代码库。 使用 ..
形成 JNLP 文件的 URLURL urlToJnlp = new URL(
basicService.getCodeBase(),
System.getProperty("jnlp.href") );
加载 JNLP 文件并使用 J2SE 的众多 XML API 之一对其进行解析。 (如果它没有加载到 J2SE 的 XML API 中,则强烈表明它是无效的或格式错误的 - 应该使用诸如 JaNeLA 之类的工具进行检查。)
加载解析后,即可获取并呈现基本信息。
【讨论】:
您可以通过检查 jnlp 服务的可用性来检测应用程序是否使用 webstart 启动。比如:
public boolean launchedByJNLP(){
try {
ServiceManager.lookup("javax.jnlp.BasicService");
} catch (UnavailableServiceException e) {
return false;
}
return true;
}
关于获取 About 对话框的 jnlp 信息,我认为您最好的解决方案是将您想要的 about 对话框中的任何信息包含在与您的应用程序一起打包的单独属性文件中。
【讨论】: