7

リソースをjarにパッケージ化しようとしていますが、FlyingSaucerでクラスパス上のcssを見つけるのに問題があります。これをシームレスに解決できるようにURLを簡単に作成することはできません

フライングソーサーには、アイテムや画像を解決するためにクラスパスでリソースパッケージを指定する方法がありますか?

注:これは、ファイルシステムの書き込み権限がないWebスタートアプリケーションで実行しているため、jar拡張は実際にはオプションではありません。

4

3 に答える 3

6

XHTMLPanelにフィードするUserAgentCallbackを、次のように実装する必要があります。

private static class UAC extends NaiveUserAgent {
    @Override
    public String resolveURI(String uri) {
        return uri;
    }

    @Override
    protected InputStream resolveAndOpenStream(String uri) {
        java.io.InputStream is = null;
        URL url = UAC.class.getResource(uri);
        if (url == null) {
            XRLog.load("Didn't find resource [" + uri + "].");
            return null;
        }
        try {
            is = url.openStream();
        }
        catch (java.net.MalformedURLException e) {
            XRLog.exception("bad URL given: " + uri, e);
        }
        catch (java.io.FileNotFoundException e) {
            XRLog.exception("item at URI " + uri + " not found");
        }
        catch (java.io.IOException e) {
            XRLog.exception("IO problem for " + uri, e);
        }
        return is;
    }
}

XHTMLPanel panel = new XHTMLPanel(new UAC());
于 2010-05-21T20:21:52.863 に答える
0

空飛ぶ円盤にはクラスパスでリソースを指定する方法がないように思われるので、リンクされた質問で classpath: protocol url ハンドラーを作成することで回避します

実装後の調査結果

この質問の前提のいくつかは無効であるように思われます。<all-permissions/>独自のクラスパス URL ローダーを作成した後、使用できるようにするには jnlp でリクエストする必要があることがわかりましたURL.setURLStreamHandlerFactory()。実際には、(自分のサンドボックスを変更するだけであるにもかかわらず) 細かいことを行うには、すべてのアクセス許可を要求する必要があります。完全なリストはこちらでご覧ください。

つまり、これはファイルをオペレーティング システムに抽出できることを意味します。しかし、今ではクラスパスローダーがあるのはいいことです...

于 2009-11-20T11:06:53.763 に答える