リソースをjarにパッケージ化しようとしていますが、FlyingSaucerでクラスパス上のcssを見つけるのに問題があります。これをシームレスに解決できるようにURLを簡単に作成することはできません。
フライングソーサーには、アイテムや画像を解決するためにクラスパスでリソースパッケージを指定する方法がありますか?
注:これは、ファイルシステムの書き込み権限がないWebスタートアプリケーションで実行しているため、jar拡張は実際にはオプションではありません。
リソースをjarにパッケージ化しようとしていますが、FlyingSaucerでクラスパス上のcssを見つけるのに問題があります。これをシームレスに解決できるようにURLを簡単に作成することはできません。
フライングソーサーには、アイテムや画像を解決するためにクラスパスでリソースパッケージを指定する方法がありますか?
注:これは、ファイルシステムの書き込み権限がないWebスタートアプリケーションで実行しているため、jar拡張は実際にはオプションではありません。
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());
空飛ぶ円盤にはクラスパスでリソースを指定する方法がないように思われるので、リンクされた質問で classpath: protocol url ハンドラーを作成することで回避します
この質問の前提のいくつかは無効であるように思われます。<all-permissions/>
独自のクラスパス URL ローダーを作成した後、使用できるようにするには jnlp でリクエストする必要があることがわかりましたURL.setURLStreamHandlerFactory()
。実際には、(自分のサンドボックスを変更するだけであるにもかかわらず) 細かいことを行うには、すべてのアクセス許可を要求する必要があります。完全なリストはこちらでご覧ください。
つまり、これはファイルをオペレーティング システムに抽出できることを意味します。しかし、今ではクラスパスローダーがあるのはいいことです...