У меня такая структура папок.
Project/src/folder/folder/folder/xyz.java
/img/background.jpg
И я хочу поместить background.jpg в JPanel в xyz.java
. Просто для фона.
И я сделал это с
private ImageIcon createImageIcon(String path, String description) {
java.net.URL imgURL = getClass().getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL, description);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
Но проблема здесь в том, что изображение должно быть в той же папке, что и xyz.java
Я немного искал и обнаружил, что это можно решить с помощью getResourceAsStream("path")
, но я не могу собрать достаточно знаний, чтобы решить эту проблему.
Это важно для меня, потому что я хочу запустить свою программу как файл * .jar в разных операционных системах.
Моя проблема в том, что я не понимаю, как getRessourceAsStream ("путь") должен работать по-другому. Я не нашел учебник, который подходит для меня. Кажется, что большинство людей используют его для разных файлов .jar или апплетов. И я не знаю, что может сделать поток, где начинается getRessourceAsStream («путь») (означает, как я должен написать путь). Существует так много недостатков знаний ...
Редактировать: я нашел решение, в котором мне не нужно указывать общий путь.
img = ImageIO.read(getClass().getResource("../../../../img/bg_1.jpg"));
Я не проверял его, но он также должен работать на других системах. Но проблема в том, что я могу запустить свою программу только в затмении. Когда я экспортирую его в файл * .jar, это происходит нормально, но не загружает картинку. И это сокращает окно до минимума, хотя у меня есть setPreferredSize.
Так что, возможно, мне стоит выработать решение Stream. Но теперь это время спать.
Редактировать: относительный путь работает нормально, когда я помещаю изображения в пакет. Не то, что я действительно хотел, но после 6 часов угадывания об этой крошечной проблеме мне пришлось принести несколько рыбок, чтобы плавать через мой океан ...