2017-01-14 3 views
1

Я пытаюсь отобразить значок в моем графическом интерфейсе с использованием относительного пути, как в «отображаемом изображении от resources/image.png». Я пробовал миллион различных способов выразить это, но ничего не работает. Это заставляет меня думать, что это проблема с настройками IntelliJ IDEA или структурой проекта. Я установил папку «resources» как «папку ресурсов». Я не знаю, что еще он ожидает от меня.Относительные пути ресурсов в проекте Java в IntelliJ IDEA

Как загрузить значок из файла с использованием относительного пути в проекте Java в IntelliJ IDEA?

Моя структура проекта:

src/main/java/ <-- set as "sources" in IntelliJ 
src/main/java/ui/ <-- contains classes for my GUI 
src/main/resources/ <-- set as "resources" in IntelliJ. Contains images. 

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

String path = "src/main/resources/image.png"; 
System.out.println(new File(path).exists()); <-- true 
+0

как вы загружаете изображения в код? Я чувствую, что это не может иметь ничего общего с IntelliJ – Moira

+0

Ну, один из способов, которые я пробовал, находится здесь: https://docs.oracle.com/javase/tutorial/uiswing/components/icon.html –

+0

попробуйте используйте ['ImageIO'] (https://docs.oracle.com/javase/7/docs/api/javax/imageio/ImageIO.html), который был создан для удобной загрузки изображений (например,« ImageIcon icon = новый ImageIcon (ImageIO) .read (getClass(). getResourceAsStream (путь))) – Moira

ответ

1

Я столкнулся с этой проблемой много раз, и то, что работало для меня использовал InputStream

InputStream is = Main.class.getClassLoader().getResourceAsStream("name_of_file.png"); 

Использования InputStream позволит считывать информацию из различных типов файлов. Теперь для загрузки в иконке вы можете сделать

Icon icon = new ImageIcon(ImageIO.read(is)); 
+0

это, предположим, относится к классу, который вы также можете назвать' Main.class. * 'Где' Main' - это имя вашего класса – coletrain

+0

Давайте продолжим обсуждение чат] (http://chat.stackoverflow.com/rooms/133158/discussion-between-coletrain-and-atte-juvonen). – coletrain

0

Ресурсов по классам, а не на пути файловой системы - которая берется по сравнению с управлением каталогом, который является каталогом проекта, когда вы работаете его от идеи. Обычно вы будете распространять свое приложение как банку, и это лучше загружать ресурсы из класса. В zour case - из корневого каталога