2011-02-10 95 views
5

我從包含有用信息(如供應商,描述和其他字段)的jnlp文件運行應用程序。獲取當前的JNLP信息

什麼是運行時獲取這些數據以建立「關於」對話框的最合理的方式?

有沒有一種方法可以檢測到應用程序在沒有Java Web Start的情況下啓動?

感謝您的幫助。

皮埃爾

+1

你有什麼理由不能將它與JNLP文件一起燒入應用程序中並從那裏取出它? – 2011-02-10 19:10:05

回答

5

實現預期目標有多種策略。我不會重新提到已經提到的那些,而是再提出幾個。


1) 信息可以放在檔案清單中。它可以使用java.lang.Package類的方法來檢索。

String title = pckg.getImplementationTitle(); 
String vendor = pckg.getImplementationVendor(); 
String version = pckg.getImplementationVersion(); 

的包裝類也有找出所有加載包的能力。

Package[] package = Package.getPackages(); 

迭代是尋找你的包,你可以得到目前加載的所有包的列表。

將信息放入清單中的最好方法是使用Ant或類似的構建工具。這樣的版本可以設置爲日期 - 很容易完成。


2)將屬性添加到JNLP的資源部分。

<resources> 
    .. 
    <property name="jnlp.href" value="${href}" /> 
    .. 
</resources> 

BTW - 即使用${href}是指作爲JNLP href屬性完全相同的字符串。使用BasicService.getCodeBase()方法獲取代碼庫。 形式的URL使用JNLP文件..

URL urlToJnlp = new URL(
    basicService.getCodeBase(), 
    System.getProperty("jnlp.href")); 

裝入JNLP文件,並使用J2SE的XML API的多如牛毛的一個解析。 (如果它不存在於J2SE的XML API的加載,它有力地表明這是無效或格式錯誤 - 而應使用工具如JaNeLA檢查)

一旦加載和解析,基本信息可獲得&提交。

2

如果應用程序使用在webstart通過的JNLP服務的可用性檢查啓動您可以檢測。喜歡的東西:

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

    return true; 
} 

至於獲得JNLP信息的關於對話框,我想你最好的解決辦法是包括在您的關於對話框想在一個單獨的屬性信息的任何文件打包您的應用程序。