Чтение неисправностей BufferedImage

У меня странная проблема. У меня есть игра, в которой изображение отскакивает вокруг экрана в "темноте" (черный Rect), а курсор мыши представляет собой фонарик, который светит сквозь темноту (вычитает овал).

Теперь у меня есть один .png образ и один звуковой файл .wav. Я имею их в папке "ресурсы" в моей папке проекта, и я обращаюсь к ним через файловые пути "resources/myImage.png" и "resources/mySound.wav".

Все работает нормально, когда я запускаю программу в Eclipse (используя Kepler btw); изображение отображается хорошо, и звук воспроизводится при приведении в действие, но как только я экспортирую его в виде банки и запускаю, он отображает имя программы в течение нескольких секунд, как если бы это была активная программа, но вскоре после выхода из нее/сбоев, Я открываю терминал и запускаю java -jar/Users/MyUsername/Desktop/MyProg.jar который получает один и тот же результат, но я получаю журнал сбоев в терминале. В нем говорится:

Aug 23, 2013 4:10:02 PM com.spotlight.TestPane <init>
SEVERE: null
javax.imageio.IIOException: Can't read input file!
 at javax.imageio.ImageIO.read(ImageIO.java:1301)
 at com.spotlight.TestPane.<init>(TestPane.java:62)
 at com.spotlight.Spotlight$1.run(Spotlight.java:32)
 at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
 at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721)
 at java.awt.EventQueue.access$200(EventQueue.java:103)
 at java.awt.EventQueue$3.run(EventQueue.java:682)
 at java.awt.EventQueue$3.run(EventQueue.java:680)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:691)
 at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
 at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
 at com.spotlight.TestPane.<init>(TestPane.java:69)
 at com.spotlight.Spotlight$1.run(Spotlight.java:32)
 at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
 at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721)
 at java.awt.EventQueue.access$200(EventQueue.java:103)
 at java.awt.EventQueue$3.run(EventQueue.java:682)
 at java.awt.EventQueue$3.run(EventQueue.java:680)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:691)
 at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
 at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
 at com.spotlight.TestPane.move(TestPane.java:169)
 at com.spotlight.TestPane$1.actionPerformed(TestPane.java:51)
 at javax.swing.Timer.fireActionPerformed(Timer.java:312)
 at javax.swing.Timer$DoPostEvent.run(Timer.java:244)
 at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
 at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721)
 at java.awt.EventQueue.access$200(EventQueue.java:103)
 at java.awt.EventQueue$3.run(EventQueue.java:682)
 at java.awt.EventQueue$3.run(EventQueue.java:680)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:691)
 at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
 at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
</init></init></init>

Для подтверждения мой код для чтения файла изображения:

BufferedImage img;
//...
try {
 img = ImageIO.read(new File("resources/myImage.png"));
 } catch (IOException ex) {
 Logger.getLogger(Spotlight.class.getName()).log(Level.SEVERE, null, ex);
 }

Я экспортировал свою программу следующим образом:

  • Я щелкнул правой кнопкой мыши по папке проекта и выберите "Экспорт",
  • Я выбираю опцию "Runnable Jar"
  • Я выбираю правильную конфигурацию запуска
  • Я просматриваю правильный пункт экспорта (/Users/MyUsername/Desktop/MyProg.jar)
  • В разделе "Обработка библиотеки" я выбираю "Извлечение необходимых библиотек в сгенерированный JAR"
  • "Сохранить как ANT-скрипт" остается непроверенным
  • Я нажимаю "Готово", и банка генерируется без каких-либо предупреждений

Я знаю, что на самом деле это не для публикации журналов сбоев, но я здесь очень расстроен, поэтому любая помощь приветствуется.

UPDATE: я добавил оператор System.err.println в блок try/catch и использовал Unarchiver для извлечения содержимого jar, а папка ресурсов не отображается. Если ресурсы не экспортируются, это может быть моей проблемой, но я не знаю, как это исправить.

1 ответ

Обычная проблема, обычно размещенная здесь. Вы пытаетесь получить доступ к ресурсу в виде файла, в котором не существует файла. Стоп. Файлы Jar не хранят файлы, поэтому не пытайтесь получить что-либо в них как файлы. Получите данные как ресурс. Google вопрос, потому что, как я уже сказал, он публикуется здесь несколько раз в неделю.

licensed under cc by-sa 3.0 with attribution.