Вопрос по java, netbeans, embedded-resource, project – Jar Embedded Resources NullPointerException [закрыто]

-2

Первоначально я начал с Chillax, после того, как обнаружил так много проблем, которые были близки к крайнему сроку, я вернулся в среду разработки, с которой я более знаком, - NetBeans, и изменил свой подход на более базовый ».Астероид»Тип игры:

NBs почтовый файл:http://ge.tt/4T5tBFT/v/0?cтекст: git clone git: //gist.github.com/4248746.gitвстраивать ?:

В NetBeans я получаю:

Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.(ImageIcon.java:205)
at gayme.Craft.(Craft.java:27)
at gayme.Board.(Board.java:54)
at gayme.Gayme.(Gayme.java:9)
at gayme.Gayme.main(Gayme.java:19)
Java Result: 1

источники: (Craft 26 - 34)

    public Craft() {
    ImageIcon ii = new ImageIcon(this.getClass().getResource("craft.png"));
    image = ii.getImage();
    width = image.getWidth(null);
    height = image.getHeight(null);
    missiles = new ArrayList();
    visible = true;
    x = 40;
    y = 60;}

(Совет 54)

    craft = new Craft();

(Гейм 9)

    add(new Board());

(Гейм 19)

   new Gayme();

У меня есть проблемы, которые мне действительно нужно решить, и мой мозг, лишенный сна, теряет каждый. Не стесняйтесь помогать в любой игре, которую выскорее. Большое спасибо, ребята!

В обоих случаях кажется, что у вас есть проблемы с чтением изображений, возможно, они отсутствуют на пути к классам или подобным образом Aksel Willgert

Ваш Ответ

1   ответ
4

Класс # getResourceAsStream (имя строки)Класс # getResource (имя строки)ToolKit # createImage (URL-адрес)

Несколько вещей, которые нужно помнить о работе с файлами Jar и ресурсами, расположенными внутри:

JVM чувствительна к регистру, поэтому имена файлов и пакетов чувствительны к регистру. Т.е. главный класс находится внутриMyPackage Теперь мы не можем извлечь его с помощью следующего пути:MyPackage

Любой период "." находится в названии пакета и заменяется на '/'

Если имя начинается с '/' ('\ U002f»), то абсолютное имя ресурса - это часть имени, следующая за '/', Имена ресурсов начинаются с / при выполнении класса и ресурсы находятся в разных пакетах.

Давайте проверим это, используя мой предпочтительный методgetResource(..) который вернет URL нашего ресурса:

Я создаю проект с 2 пакетами:org.test а такжеMy.Resources:

Как вы можете видеть мое изображение вMy.Resources в то время как основной класс, который проводитmain(..) вorg.test.

Main.java:

import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

public class Main {

    public static final String RES_PATH = "/my/resources";//as you can see we add / to the begining of the name and replace all periods with /
    public static final String FILENAME = "Test.jpg";//the case sensitive file name

    /*
     * This is our method which will use getResource to extarct a BufferedImage
     */
    public BufferedImage extractImageWithResource(String name) throws Exception {

        BufferedImage img = ImageIO.read(this.getClass().getResource(name));

        if (img == null) {
            throw new Exception("Input==null");
        } else {
            return img;
        }
    }

    public static void main(String[] args) {
        try {
            BufferedImage img = new Main().extractImageWithResource(RES_PATH + "/" + FILENAME);
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }
}

Если вы поиграете с именамиRES_PATH или жеFILENAME без внесения соответствующих изменений в реальные файлы вы получите исключение (просто показывает, насколько мы должны быть осторожны с путями)

ОБНОВИТЬ:

Для вашей конкретной проблемы у вас есть:

ImageIcon ii = new ImageIcon(this.getClass().getResource("craft.png"));

так должно быть:

ImageIcon ii = new ImageIcon(this.getClass().getResource("/resources/craft.png"));

Alien и другие классы также должны быть изменены.

о боже, яя идиот ... большое спасибо! MakJagz3
еще раз спасибо,Вот мой почтовый индекс, полностью функциональный благодаря вашей помощи! MakJagz3
@ user1890890 протестировал ваш проект netbeans и обнаружил проблему: см. обновление David Kroukamp
Спасибо за вашу помощь. Я изменил импорт изображений, теперь он компилируется, но выглядит какэтот прежде чем сразу же отправиться вИгра окончена" Экран ... извините, что вас беспокоит еще больше, но есть идеи? MakJagz3

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