eclipseのsrc/dirのパッケージに含まれるリソースを正常に読み込むことができます。さて、私はjarをエクスポートします(src、export、jarを右クリックし、デフォルト設定を保持します)。リソースを別のEclipseプロジェクトにロードすることはできません。 getResource()はjar内のコンテンツをロードできません
は、私は、同じパッケージ名でクラスの地位を示すことにより、リソースへのパスを構築する:URL out = getClass().getClassLoader().getResource(packageName(getClass())+"file.glsl");
// out is null when loaded from a jar!!
protected static String packageName(Class<?> clazz){
return packageName(clazz.getPackage());
}
protected static String packageName(Package p){
return c + p.getName().replace('.', c) + c;
}
protected static char c = File.separatorChar;
はあなたがどんな間違った方法を参照していますか? 私が試み:
- のgetClass()のgetResource()
- のgetClass()のgetClassLoader()のgetResource()
- のgetClass()のgetClassLoader()getResourceAsStream()
- スレッド。。。。。。 currentThread()。getContextClassLoader()のgetResource()
- 'のいずれか '/'、 '\'、またはFile.separatorCharを使用してパッケージ名
- の初めに '/' 文字を削除/追加すること、さらに。 '、すべて失敗しました。
私はそれを検証:
- jarファイルは、リソース(日食プロジェクトの "参照されるライブラリ" 内のjarコンテンツを拡充)
- のpackageName(のgetClass())+ファイル名が含まれています)きれいな名前を返します。 "\ ORG \ jzy3d \ PLOT3D \レンダリング\ DDP \アルゴリズム\ dual_peeling_init_vertex.glsl"
私は延々とnullの取得:/
をEDIT:スクリーンショットとコード
を "それが動作するはずです" あなたはこのa SSCCE zipped eclipse project here
ユーザークラス
newで動的にクラスを提供public class User {
public static void main(String[] args) {
Loader pair = new Loader(SomeClass.class, "shade_vertex.glsl");
System.out.println("found:" + pair.getURL());
}
}
を取得できることを示しますSomeClass()。getClass()は同じ結果を生成します。
ローダー
package com.pkg.loader;
import java.io.File;
import java.net.URL;
public class Loader {
public Loader(Class<?> c, String file) {
this(packageName(c.getPackage()), file);
}
public Loader(Package p, String file) {
this(packageName(p), file);
}
protected Loader(String pack, String file) {
this.pack = pack;
this.file = file;
}
public String getStringPath() {
return pack+file;
}
public URL getURL() {
URL out = Thread.currentThread().getContextClassLoader().getResource(getStringPath());
if(out==null)
throw new RuntimeException("unable to find shader URL for :'"+getStringPath()+"'");
return out;
}
protected static String packageName(Class<?> clazz){
return packageName(clazz.getPackage());
}
protected static String packageName(Package p){
return c + p.getName().replace('.', c) + c;
}
protected static char c = File.separatorChar;
protected String pack;
protected String file;
}
マーカークラス
public class SomeClass {}
リソースがあなたのjarファイル内の予想される場所にあることを手動で確認しましたか? – DNA
あなたのjarファイルがランタイムクラスパスになっていることを確認してください – objects
"*何か提案がありますか?" * 1)[SSCCE](http://sscce.org/)を投稿してください。 2) 'System.out.println(packageName(getClass())+" file.glsl "); // debugging 101' –