我可以成功加載站在eclipse中某些包中的src/dir的資源。現在,我導出jar(右鍵單擊src,export,jar,並保留默認設置),並且不能將資源加載到另一個eclipse項目中。getResource()無法加載罐子中的內容
我通過指示在同一個包名稱的類站立構建路徑資源:
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包含資源(擴大Eclipse項目的 「引用的庫」 罐子內容)
- 的packageName(的getClass())+文件名)返回一個乾淨的名稱: 「\組織\ jzy3d \ PLOT3D格式\渲染\ DDP \算法\ dual_peeling_init_vertex.glsl」
我無休止地檢索空:/
編輯:截圖和代碼表明, 「應該工作」
您可以用新的動態檢索該a SSCCE zipped eclipse project here
用戶類
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 2012-02-20 23:56:05
確保你的jar在運行時類路徑 – objects 2012-02-20 23:52:37
「*任何建議?」* 1)發佈[SSCCE](http://sscce.org/)。 2)'System.out.println(packageName(getClass())+「file.glsl」); //調試101' – 2012-02-21 06:25:04