2013-08-31 2 views
3

Я пытаюсь загрузить изображение из исполняемого файла JAR.Загрузить изображения в файле jar

Я следил за информацией от here, затем от here.

Это функция для получения изображений:

public static ImageIcon loadImage(String fileName, Object o) { 
    BufferedImage buff = null; 
    try { 
     buff = ImageIO.read(o.getClass().getResource(fileName)); 
     // Also tried getResourceAsStream 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 
    if (buff == null) { 
     System.out.println("Image Null"); 
     return null; 
    } 
    return new ImageIcon(buff); 
} 

И это, как его называют:

logo = FileConverter.loadImage("/pictures/Logo1.png", this); 
JFrame.setIconImage(logo.getImage()); 

С это быть простой объект. Я также не получаю NullPointerException, если он не замаскирован пользовательским интерфейсом.

Я проверил файл JAR и изображение на:

/pictures/Logo1.png

Этот текущий код работает как в затмении, и когда он был экспортирован в JAR и запустить в терминале, но не работает, когда JAR дважды щелкнут, и в этом случае значок является значком JFrame по умолчанию.

Спасибо, что вам нужна помощь. Вероятно, мне только что-то не хватает.

+0

Он отлично работает на моей стороне, даже если я дважды щелкаю файл 'JAR' или запускаю его через' command prompt'. Я создал [этот проект] (https://www.dropbox.com/s/32txnn42zxwebzi/SwingTest.zip) в eclipse juno, вы тоже можете проверить это :-) –

+0

Что вы думаете, если вы это сделаете - верните новый ImageIcon (getClass() .getResource ("/ pictures/Logo1.png")); 'непосредственно? –

ответ

2

У меня была аналогичная проблема, которая, как оказалось, была направлена ​​на устранение относительной адресации, а мой путь был не в том месте. Я выкопал это из какого-то старого кода, который я написал, что сделал его абсолютным путем. Это, похоже, исправить мою проблему; возможно, это сработает для вас.

String basePath = (new File(".")).getAbsolutePath(); 
basePath = basePath.substring(0, basePath.length()-1); 
FileConverter.loadImage(basePath+"/pictures/Logo1.png", this); 
+0

Это вызывает полное имя файла/Geometric Shapes // pictures/Logo1.png, Извините за поздний ответ – Adude11

+0

Я исправил его, проблема была в java на моей ОС. Все равно, спасибо за помощь. – Adude11

Смежные вопросы