3

WebStart アプリケーションでは、次のコードを使用してプログラムで JNLP コードベースを取得しています。

package web.start.test;

import java.net.URL;

import javax.jnlp.BasicService;
import javax.jnlp.ServiceManager;
import javax.jnlp.UnavailableServiceException;
import javax.swing.JOptionPane;

public class WebStartTest
{
    public static void main(String[] args)
    {
        try
        {
            BasicService basicService = (BasicService) ServiceManager.lookup("javax.jnlp.BasicService");
            URL codeBase = basicService.getCodeBase();
            JOptionPane.showMessageDialog(null, "Code base is: [" + codeBase + "]");
        }
        catch (UnavailableServiceException exception)
        {
            throw new RuntimeException(exception);
        }
    }
}

この JNLP 記述子を使用して、アプリケーションを開始しています。

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="file:/d:/playground/eclipse/WebStartTest" href="WebStartTest.jnlp">
    <information>
        <title>WebStartTest</title>
        <vendor>Web Start Tester</vendor>
    </information>
    <security>
        <all-permissions/>
    </security>
    <resources>
        <j2se version="1.7+" />
        <jar href="target/WebStartTest-0.0.1-SNAPSHOT.jar" />
    </resources>
    <application-desc main-class="web.start.test.WebStartTest" />
</jnlp>

jar ファイルをパッケージ化して署名した後、JNLP ファイルで Enter キーを押すと、アプリケーションが正常に起動しますが、ポップアップ メッセージには「Code base is: [null]」と表示されます。

同じコードを Web サーバーにデプロイし、コードベース プロトコルとして「file://」ではなく「http://」を使用する JNLP ファイルを介して起動すると、コードベースが適切に取得されます。

「file://」コードベースの JNLP 記述子を使用して、ローカル (または共有ネットワーク) ドライブにデプロイされた WebStart アプリケーションのコードベースを取得する方法はありますか?

そうでない場合、(jar ファイル内にパッケージ化されていない) リソース ファイルにアクセスするために、アプリケーション ディレクトリへの URL をプログラムで見つけるにはどうすればよいでしょうか?

さらに、ベスト プラクティスの観点から: WebStart アプリケーションを Web サーバーではなく共有ネットワーク ドライブに展開することは (単純化のために) 合理的なアプローチですか、それとも避けるべきハックですか?

ありがとうございました。

4

3 に答える 3

0

既知のクラスの URL からアプリケーション コード ベースを導き出すことができます。

URL url = WebStartTest.class.getResource("/web/start/test/WebStartTest.class");

System.out.println("url = " + url);

版画

url = file:C:/projects/Test/classes/web/start/test/WebStartTest.class
于 2013-08-28T04:02:48.217 に答える