Я пытаюсь импортировать некоторые фотографии, используя приведенный ниже код. Кажется, что проверка, которую я только что добавил (оператор if), возвращается как «yay», так что файл есть. Таким образом, он может найти файл, который работает нормально, но по какой-то причине он не может импортировать файл и создать значок изображения. Любая помощь будет принята с благодарностью! Я также пробовал с относительным путем, но безуспешно!
Любая помощь будет принята с благодарностью, так как я уже давно ломаю голову над этим!
public class Photos {
ImageIcon bi = new ImageIcon();
// Position
private int x, y;
// Diameter (storlek)
private int diameter;
private int dynamicdiameter;
public void importPhoto(String name) {
String path = "/Users/Cedric/Dropbox/UU/OOPJ/Foton/src/img/";
File imageCheck = new File(path+name);
if (imageCheck.exists()){
System.out.println("yay");
}
else{System.out.println("noo");}
ImageIcon bi = createImageIcon(path+name, "Photo");
}
protected 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;
}
}
}
То, что вы делаете, в основном эквивалентно «давайте посмотрим, существует ли файл /foo/bar/image.png на моем жестком диске. Ура, он существует. Итак, теперь давайте загрузим изображение из http://google.com/foo/bar/image.png. О, почему это не работает?» Файл в вашей файловой системе — это не то же самое, что ресурс, загруженный из пути к классам. Синтаксис другой, места поиска ресурса другие. Прочитайте javadoc Class.getResource(). нет ожидает путь к файлу.
Как вы упаковываете и запускаете это? Если вы хотите прочитать файл из файловой системы, используйте new File(path).toURI().toURL();
Если распечатать imgURL, он просто печатает нулевое значение. JB Nizet - Я пробовал и относительный патч, но безуспешно. Не могли бы вы намекнуть, что мне не хватает? Я попытался прочитать javadoc, но дальше ничего не продвинулся. :(
Он также не ожидает относительного пути к файлу. Если вы хотите загрузить образ из файловой системы, то делайте так, как говорит Эллиотт. Если вы хотите загрузить его из пути к классам, укажите путь, начинающийся с корня пути к классам, как описано в javadoc. Предполагая, что src — это ваш исходный каталог, а ваша IDE копирует изображения в папку классов, путь будет "/img/" + name.
Спасибо JB, я пробовал "/img/" + имя, но безуспешно. Я использую IntelliJ Idea в качестве IDE, не знаю, как проверить, копирует ли он img в путь к классам.
Вы объявляете bi дважды. Измените ImageIcon bi = new ImageIcon(); на ImageIcon bi ; и, что более важно, ImageIcon bi = createImageIcon(path+name, "Photo"); на bi = createImageIcon(path+name, "Photo");




Некоторые незначительные изменения должны исправить ситуацию. Смотрите комментарии:
public void importPhoto(String name) {
String path = "/img/" + name; //use correct path
URL imgURL = getClass().getResource(path);
if (imgURL != null){
System.out.println("yay");
bi = createImageIcon(imgURL, "Photo"); //avoid declaring a new bi
} else {
System.err.println("noo");
}
}
protected ImageIcon createImageIcon(URL imgURL,String description) {
return new ImageIcon(imgURL, description);
}
Как насчет того, чтобы напечатать значение
imgURLв методеcreateImasgeIcon()?