Я могу успешно загрузить ресурсы, которые находятся в каком-то пакете моего src / dir в eclipse.Теперь я экспортирую jar (щелкните правой кнопкой мыши src, export, jar и сохраните настройки по умолчанию) и не могу загрузить ресурс в другом проекте Eclipse.
Я строю путь к ресурсу, указывая классстоя в том же названии пакета:
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 ()
- Thread.currentThread (). getContextClassLoader (). getResource ()
- добавление / удаление символа '/' в начале имени пакета
- с использованиемлибо '/', '\', либо File.separatorChar, и даже '.', все не удалось.
Я убедился, что:
- jar содержит ресурс (развертывание содержимого jar в «Ссылочных библиотеках» проекта eclipse)
- packageName (getClass ()) + filename) возвращает чистое имя: «\ org \ jzy3d \ plot3d \ render \ ddp \gorithms \ dual_peeling_init_vertex.glsl»
Я бесконечно извлекаю ноль: /
РЕДАКТИРОВАТЬ: снимок экрана и код, чтобы показать, что «это должно работать»
Вы можете получить этот проект затмения в формате SSCCE здесь
Класс пользователя
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 {}