2012-03-02 8 views
1

Javaは、JNLPを介してユーザーのデスクトップOSとうまく統合されます。 ソフトウェアはデスクトップアイコンとして表示されるだけでなく、コントロールパネル(Windows 7)にインストールされたプログラムとして表示されます。私はまた、JNLPファイルを自動的にファイル関連付けを設定することができました。ユーザーが自分のプログラムで保存したファイル(pxmlファイル)をダブルクリックすると、プログラムが起動します。 JNLPは、この優れたデスクトップ統合をWebの立ち上げを通じてスムーズに実行します。 1つの問題が残っています。ユーザーがダブルクリックしたデータファイルをプログラムに読み込ませるにはどうすればよいですか? pxmlファイルには自分のプログラムと同じアイコンが与えられ、JNLPはファイルの関連付けを作成したので、ユーザーがpxmlファイルを開こうとするとWindowsがソフトウェアを起動することがわかります。しかし、私のプログラムは、起動時にそのファイルをOPENする方法を知っていますか?以下Java JNLPデスクトップショートカットとアイコン

に渡されるパラメータの配列の第二の要素を使用して、Java Web Startの起動に関連付けられたファイルを開くにProctinator.com

<jnlp spec="6.0+" codebase="http://proctinator.com/dist" > 
    <information> 
    <title>The Proctinator</title> 
    <vendor>Smart Software Solutions, INC.</vendor> 
    <homepage href="http://proctinator.com"/> 
    <description kind="short">The Proctinator exam scheduling software</description> 
    <icon kind="splash" href="splashScreen.jpg" /> 
    <icon kind="shortcut" href="bigP.jpg" /> 
    <offline-allowed/> 
    <association extensions="pxml" mime-type="application/pxml"/> 
    <shortcut online="false"> 
     <desktop/> 
    </shortcut> 
    </information> 
    <resources> <j2se version="1.6+"/> ... </resources> 
<application-desc main-class="thornworks.proctor.GUI"/> 

+0

は前にこれを試したことはありませんが、これはちょうどあなたのmain()メソッドにパラメータとして渡されますされませんか? – mikera

+0

JNLPが無効であり、不正な形式の場合、[JaNeLA](http://pscode.org/janela/)を使用して確認してください。 –

+0

Andrew - 上記のXMLはファイル全体ではありません。 JaNeLAが最新であり、1,6で導入された新しい構文を認識していますか? – Thorn

答えて

1

から採取し、参照用のJNLPファイルの一部でありますmain(String[] args)。最初の要素は、ファイルをダブルクリックしてアプリケーションを起動すると "-open"になり、args [1]は起動時に開くファイルのファイルパスを格納します。この機能により、Javaアプリケーションはネイティブデスクトップアプリケーションのように感じられます。

JNLPのドキュメントでこれを見つけることができませんでした。

この機能を実装するサンプルのメインメソッドを次に示します。 FileFunctionは、アプリケーションファイルI/Oの静的メソッドを持つクラスです。

public static void main(String[] args) { 
    GUI win = new GUI(null); 
    if(args.length==2) { 
     win = new GUI(null); 
     StringBuilder params = new StringBuilder(); 
     for(String s : args) { 
      params.append(s); 
      params.append("\n"); 
     } 
     JOptionPane.showMessageDialog(null, params); 
     try { 
      FileFunction.loadList(new FileInputStream(new File(args[1]))); 
     } 
     catch(IOException ioe) { 
      FileFunction.showFileError(ioe); 
     } 
    }