Не удалось запустить загруженный баннер (без доступа к файлам src) [дублировать]

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

0
задан ifloop 28 October 2014 в 18:49
поделиться

1 ответ

Ваша программа выйдет из строя, потому что RockPaperScissors.class.getResource("Rock.jpg") не удалось найти указанный файл. Это также учитывает другие изображения, которые вы пытаетесь загрузить. Java пытается найти их в корневой папке проекта или в том же каталоге, что и файл JAR, когда вы превращаете свою программу в исполняемый JAR. Как вы указали, они находятся в той же папке, что и перечисление.

Я бы рекомендовал создать новую папку в корне вашего проекта под названием «res» и переместить все ваши файлы изображений в это папка. Затем замените:

new ImageIcon(RockPaperScissors.class.getResource("Rock.jpg"))

на:

new ImageIcon("res/Rock.jpg")

И сделайте это для каждого места, где вы загружаете изображения.

На несвязанной ноте , так как иконы переименования RockPaperScissors не должны меняться, лучше (и проще) сделать их общедоступными. Конечные переменные могут быть назначены только один раз и должны быть назначены при создании объекта. Таким образом, они действуют как константы. В коде:

public final ImageIcon icon;

private RockPaperScissors(ImageIcon icon) {
    this.icon = icon;
}

И просто избавитесь от геттера и сеттера, теперь вы можете напрямую перейти к полю значка.

0
ответ дан Bartvbl 17 August 2018 в 19:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: