Мой файл JAR не загружает изображения
-
10-10-2019 - |
Вопрос
В настоящее время я пишу программу, которую мне нужно отправить другу в качестве банки. В программе есть изображения, которые необходимо загрузить, чтобы программа работала правильно, и я хочу, чтобы все это было содержалось в одной банке. В настоящее время он не работает от исполняемой JAR или когда я запускаю его через командную строку. Однако он работает в NetBeans.
Вот код, который я использую:
Чтобы загрузить изображение, которое я использую:
protected ImageIcon createImageIcon(String path, String description)
{
java.net.URL imgURL = getClass().getClassLoader().getResource(path);
if (imgURL != null)
{
return new ImageIcon(Toolkit.getDefaultToolkit()
.getImage(imgURL),description);
}
else
{
System.err.println("Couldn't find file: " + path);
return null;
}
}
для URL, который я также пробовал.
getClass().getResource(path)
Линия, где должно быть создано изображение:
this.img =createImageIcon(File.separator+"."+File.separator
+"resources"+File.separator+"tiles"+File.separator+"tile.png","tile");
Мой файл JAR настроен с папкой, содержащей файлы класса, и папку ресурсов как на верхнем уровне.
Я искал способы решить это, но я не могу найти ничего, что работает.
Спасибо.
Решение
Ваш URL будет оцениваться "/./resources/tiles/tile.png"
Что не имеет смысла (но, возможно, ClassLoader
Это используется, когда вы работаете из NetBeans, допускает ошибку.)
Попробуйте отбросить начальный "/./"
. Анкет Также вам не нужны ссылки на File.separator
Поскольку строка рассматривается как относительный URL, а прямая черта всегда действительна.
Другие советы
Вместо использования /./resources/back_img.png
, использовать resources/back_img.png
с ClassLoader
.
Вот пример:
String path = "resources/back_img.png";
ClassLoader cl = ImageHandler.class.getClassLoader();
URL imgURL = cl.getResource(path);
//URL imgURL = ImageHandler.class.getResource(path);
if (imgURL != null) {
ImageIcon icon = new ImageIcon(imgURL, description);
Image img = icon.getImage();
Image sizedImg = img.getScaledInstance(width, height, Image.SCALE_DEFAULT);
return new ImageIcon(sizedImg);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
Несмотря на все остальное, ваш код обладает неисправным свойством неудачи.
Попробуйте что -то вроде
URL x = get class.getclassloader.getresource(...)
If x == null
Throw new defect "expected ... But it wasn't there"
Извините за форматирование, но iPad заставляет слишком сложно сделать это правильно.