java - изображение подходит и работает с jar, но не при использовании массива String [] для хранения имен изображений

1

Изменение: было полезно загружать изображения только один раз в конструктор по умолчанию, теперь все работает намного быстрее. Проблема, однако, изменилась. Я больше не могу открыть файл jar, и если я запустил его с консоли с помощью java -jar BounceTheSphinx.jar, я получаю это

Exception in thread ''main'' java.lang.IllegalArgumentException: input == null!:
at javax.imageio.ImageIO.read<Unknown Source>
at BounceBack.PanneauJeu.<init>(PanneauJeu.java:55)
at BounceBack.FenetreJeu.<init>(FenetreJeu.java:21)
at BounceBack.MainBounceBack.main(MainBounceBack.java:11)     

Строка 55 из PanneauJeu.java - fondArray[j] = ImageIO.read(this.getClass().getResource(imageArray[j])); Я смотрел другие сообщения, но я не могу решить свою проблему с предлагаемыми решениями. Дело в том, что я действительно использую ту же технику для загрузки и отображения этих изображений, эти изображения существуют, все работает в eclipse, но fondArray всегда вызывает проблему, а не fondPerdu

Я отредактировал код для вас, чтобы увидеть

Поэтому я написал в комментариях "РАБОТЫ" и "НЕ РАБОТАЕТ", чтобы вы могли видеть, где моя проблема.

public class PanneauJeu extends JPanel
{
private int i = 0;//color counter
private int j = 0;//imageArray counter
private int k = 0;//imagePerdu counter

private String[] imageArray = {"/resources/Sphinx.png", "/resources/Sphinx2.png ", "/resources/Sphinx3.png", "/resources/Sphinx4.png", "/resources/Sphinx5.png", "/resources/Sphinx6.png", "/resources/Sphinx7.png", "/resources/Sphinx8.png"};//score

private String[] imagePerdu = {"/resources/Lose5.png", "/resources/Lose6.png", "/resources/Lose7.png", "/resources/Lose8.png", "/resources/Lose9.png", "/resources/Lose10.png", "/resources/Lose11.png", "/resources/Lose12.png", "/resources/Lose13.png"};//, "Lose10.png", "Loose11.png", "Loose12.png"};  
private Image fond;
private Image fondArray[] = new Image[imageArray.length];
private Image fondPerdu[] = new Image[imagePerdu.length];

public PanneauJeu()//default constructor
{           
        for(int j = 0; j < imageArray.length; j++)
        {
            //DOESN'T WORK
            try
            {
                fondArray[j] = ImageIO.read(this.getClass().getResource(imageArray[j]));
            }catch(IOException e){e.printStackTrace();}
        }

        for(int k = 0; k < imagePerdu.length; k++)
        {   
            //WORKS
            try
            {
                fondPerdu[k] = ImageIO.read(this.getClass().getResource(imagePerdu[k]));
            }catch(IOException e){e.printStackTrace();}
        }
}

Может ли кто-нибудь сказать мне, что может быть неправильно? Помните, все отлично работает в Eclipse.

Спасибо всем за вашу помощь

  • 0
    Можете ли вы попытаться сделать меньший, автономный пример того, что терпит неудачу? Ваш текущий код немного ошибочно отформатирован, и трудно сказать, в чем проблема.
  • 0
    Это лучше? Я забрал весь несвязанный код.
Теги:
arrays
image
jar
animation

1 ответ

0
Лучший ответ

Не совсем понятно, в чем проблема, но есть один вероятный кандидат:

Вы загружаете изображение каждый раз, когда хотите его отобразить.

В случае анимации это означает, что вы пытаетесь постоянно перезагружать множество изображений. Это бремя как в отношении ввода-вывода, так и времени процессора. То, что вы хотите сделать, это загрузить изображения один раз, а затем сохранить их (вместо имен файлов), чтобы отображать их, когда они вам понадобятся. Таким образом, ваша программа не должна постоянно загружать и перезагружать одни и те же данные из файловой системы.

Там есть разумный шанс, что у вас есть другая проблема, но сделать это должно было бы легче найти.

После того, как вы перенесли загрузку один раз, если проблема не исчезнет, попробуйте запустить JAR из командной строки: запустите java -jar <PATH TO JARFILE> и java -jar <PATH TO JARFILE>, не распечатывает ли он какие-либо ошибки. Там есть хорошая вероятность, что произошла ошибка, которую вы не видите, если попытаетесь запустить JAR из графического интерфейса.

  • 0
    Спасибо, я сделал то, что вы сказали, и теперь это работает намного быстрее. Но банка больше не открывается. Я пытался запустить его из консоли, как вы сказали. Я отредактировал свой пост, чтобы вы увидели. еще раз спасибо
  • 0
    Ладно, я понял! Проблема была здесь: "/resources/Sphinx2.png". В конце имени есть пробел! Это должно быть примерно так: "/resources/Sphinx2.png" Но в любом случае я все еще нахожу странным, что программа запускалась под Eclipse, но не как jar. Я буду намного осторожнее с этим в будущем: большое спасибо за вашу помощь :)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню