重複の可能性:
カスタム クラス ローダーを使用したリソース バンドルの読み込み
Web サイトから jar をダウンロードして実行するカスタム クラス ローダーを作成しました。問題は: 私の (ダウンロードした) jar には、png 画像などのリソースが必要です...
(ダウンロードした) jar をコマンド プロンプトで直接実行すると、機能します。リソースは次のようにロードされます。
getClass().getResource("/images/logo.png")
ここで、カスタム クラス ローダーで実行すると、次のようになります。
Class<?> c = classLoader.loadClass("MainClass");
c.getMethod("main", new Class[] { java.lang.String[].class}).invoke(null, new Object[]{new String[] {"arg1_goes_here"}});
リソースを読み込めないため、null 例外が発生します。
jar ファイルをメモリにロードするときは、次のようにします。
String name = entry.getName();
if(name.endsWith(".class")) {
name = name.substring(0, name.length() - 6).replace('/', '.');
classbytes = getResourceData(input);
classes.put(name, classbytes);
} else {
classbytes = getResourceData(input);
if (name.charAt(0) != '/') {
name = "/" + name;
}
resources.put(name, classbytes);
}
次を使用してクラスをロードしています:
defineClass(classToLoad, buffer, 0, buffer.length, null);
はbuffer
、コードを含むバイト配列です。
だから私の質問は次のとおりです。Javaには一種のdefineResource()がありますか?
ありがとう。