获取当前的JNLP信息

时间:2011-02-10 19:02:29

标签: java jnlp

我正在从jnlp文件运行一个应用程序,该文件包含有用的信息,例如供应商,描述和其他字段。

在运行时获取此数据以构建“关于”对话框的最合理方法是什么?

有没有办法检测到应用程序是在没有Java Web Start的情况下启动的?

感谢您的帮助。

皮尔

2 个答案:

答案 0 :(得分:5)

实现预期目标有各种策略。我不会重新审视那些已经提到过的内容,而是重复几个内容。


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>

BTW - ${href}的使用旨在表示与JNLP href属性完全相同的字符串。

使用BasicService.getCodeBase()方法获取代码库。 使用..

形成JNLP文件的URL
URL urlToJnlp = new URL(
    basicService.getCodeBase(),
    System.getProperty("jnlp.href") );

加载JNLP文件并使用J2SE的众多XML API之一解析它。 (如果它没有加载到J2SE的XML API中,则强烈表明它无效或格式错误 - 应使用JaNeLA等工具进行检查。)

一旦加载并解析,就可以获得基本信息。呈现。

答案 1 :(得分:3)

您可以通过检查jnlp服务的可用性来检测是否使用webstart启动了应用程序。类似的东西:

public boolean launchedByJNLP(){
    try {
        ServiceManager.lookup("javax.jnlp.BasicService");
    } catch (UnavailableServiceException e) {
        return false;
    }

    return true;
}

至于获取关于对话框的jnlp信息,我认为你最好的解决方案是在你的应用程序包含的单独属性文件中包含你想要的任何信息。