我正在运行一个jnlp文件中的应用程序,该文件包含有用的信息,例如供应商,描述和其他字段 .
在运行时获取此数据以构建“关于”对话框的最合理方法是什么?
有没有办法检测应用程序是否在没有Java Web Start的情况下启动?
谢谢你的帮助 .
皮埃尔
有各种策略来实现预期目标 . 我不会重新审视那些已经提到过的,而是重复几个 .
1)信息可以放在档案的清单中 . 可以使用java.lang.Package类的方法检索它 .
String title = pckg.getImplementationTitle(); String vendor = pckg.getImplementationVendor(); String version = pckg.getImplementationVersion();
Package类还能够识别所有 loaded 包 .
Package[] package = Package.getPackages();
迭代寻找你的包,你可以获得当前加载的所有包的列表 .
将信息放入清单的最佳方法是使用Ant或类似的构建工具 . 这样,版本可以设置为日期 - 简单完成 .
2)将属性添加到JNLP的资源部分 .
<resources> .. <property name="jnlp.href" value="${href}" /> .. </resources>
BTW - ${href} 的使用旨在表示用作JNLP href属性的完全相同的字符串 .
${href}
使用BasicService.getCodeBase()方法获取代码库 . 使用..形成JNLP文件的URL
URL 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; }
至于获取关于对话框的jnlp信息,我认为您最好的解决方案是在与您的应用程序打包在一起的单独属性文件中包含您在about对话框中所需的任何信息 .
2 回答
有各种策略来实现预期目标 . 我不会重新审视那些已经提到过的,而是重复几个 .
1)信息可以放在档案的清单中 . 可以使用java.lang.Package类的方法检索它 .
Package类还能够识别所有 loaded 包 .
迭代寻找你的包,你可以获得当前加载的所有包的列表 .
将信息放入清单的最佳方法是使用Ant或类似的构建工具 . 这样,版本可以设置为日期 - 简单完成 .
2)将属性添加到JNLP的资源部分 .
BTW -
${href}
的使用旨在表示用作JNLP href属性的完全相同的字符串 .使用BasicService.getCodeBase()方法获取代码库 . 使用..形成JNLP文件的URL
加载JNLP文件并使用J2SE的众多XML API之一解析它 . (如果它没有加载到J2SE的XML API中,它强烈表明它无效或格式错误 - 应该使用诸如JaNeLA之类的工具进行检查 . )
加载并解析后,可以获取和显示基本信息 .
您可以通过检查jnlp服务的可用性来检测应用程序是否是使用webstart启动的 . 就像是:
至于获取关于对话框的jnlp信息,我认为您最好的解决方案是在与您的应用程序打包在一起的单独属性文件中包含您在about对话框中所需的任何信息 .