getClass().getResource() в статическом контексте

Я пытаюсь получить ресурс (image.png, в том же пакете, что и этот код) из статического метода, используя этот код:

import java.net.*;

public class StaticResource {

    public static void main(String[] args) {
        URL u = StaticResource.class.getClass().getResource("image.png");
        System.out.println(u);
    }

}

Вывод просто "нулевой"

Я также пробовал StaticResource.class.getClass().getClassLoader().getResource("image.png"); , выдает NullPointerException

Я видел другие решения, где это работает, что я делаю неправильно?


person Luke Moll    schedule 07.05.2014    source источник
comment
Какую ошибку вы получаете? Вы уверены, что у вас есть изображение в пути к классам?   -  person jgitter    schedule 07.05.2014
comment
ClassName.class точно такой же, как SomeClassReference.getClass(). Вы получаете класс класса StaticResource.   -  person DwB    schedule 07.05.2014
comment
@jgitter либо выводит null, либо генерирует исключение NullPointerException.   -  person Luke Moll    schedule 07.05.2014
comment
Не используйте таким образом. Почему вы используете getClassLoader()? Просто используйте StaticResource.class.getResource("image.png")   -  person Braj    schedule 07.05.2014
comment
Всегда старайтесь размещать ресурсы за пределами кода JAVA, чтобы сделать его более управляемым и повторно используемым другим классом пакета.   -  person Braj    schedule 07.05.2014


Ответы (2)


Удалите часть ".getClass()". Просто используйте

URL u = StaticResource.class.getResource("image.png");
person Ignacio A. Poletti    schedule 07.05.2014
comment
+1 X.class.getClass() всегда будет классом Class, поскольку все классы имеют тип Class. Поскольку он загружается загрузчиком, он почти никогда не имеет нужного вам ресурса. ;) - person Peter Lawrey; 07.05.2014

Всегда старайтесь размещать ресурсы за пределами кода JAVA, чтобы сделать его более управляемым и повторно используемым другим классом пакета.

Вы можете попробовать любой

// Read from same package 
URL url = StaticResource.class.getResource("c.png");

// Read from same package 
InputStream in = StaticResource.class.getResourceAsStream("c.png");

// Read from absolute path
File file = new File("E:/SOFTWARE/TrainPIS/res/drawable/c.png");

// Read from images folder parallel to src in your project
File file = new File("images/c.jpg");

// Read from src/images folder
URL url = StaticResource.class.getResource("/images/c.png")

// Read from src/images folder
InputStream in = StaticResource.class.getResourceAsStream("/images/c.png")
person Braj    schedule 07.05.2014
comment
Я не понимаю последних 3 - они, кажется, делают предположения о структуре какого-то проекта, которые могут (или, скорее, не могут) применяться к чьей-то настройке. - person Gyro Gearless; 07.05.2014
comment
Я хочу попытаться сохранить ресурсы вне пакетов. - person Braj; 07.05.2014
comment
просто создайте папку с изображениями, чтобы поместить все изображения в эту папку. - person Braj; 07.05.2014