программа отлично работает в Eclipse, но не при экспорте в файл .jar - PullRequest
0 голосов
/ 05 марта 2012

У меня есть небольшой графический интерфейс, который включает в себя несколько JSliders и что у вас есть. Я мог бы экспортировать его как .jar, и он работал бы без проблем. Затем я решил добавить несколько изображений и положил их в подпапку в моем пакете в Eclipse. Теперь, когда я экспортирую файл и пытаюсь запустить его, я получаю следующие ошибки (при запуске в терминале)

Henry-MAC:desktop 2010imac01$ java -jar trust.jar
Exception in thread "main" java.lang.IllegalArgumentException: input == null!
    at javax.imageio.ImageIO.read(ImageIO.java:1362)
    at trust.GUI.<init>(GUI.java:75)
    at trust.main.main(main.java:11)

После долгих поисков я думаю, что это как-то связано с тем, что .jar не включен в мой манифест (который генерирует Eclipse). Как мне увидеть / добавить необходимые пути к классам в манифесте.

Это та часть, где я открываю изображения (что я считаю ошибкой)

try {
        n  = ImageIO.read((this.getClass().getResource("smiles/n.png")));
        s5 = ImageIO.read((this.getClass().getResource("smiles/5.png")));
        s4 = ImageIO.read((this.getClass().getResource("smiles/4.png")));
        s3 = ImageIO.read((this.getClass().getResource("smiles/3.png")));
        s2 = ImageIO.read((this.getClass().getResource("smiles/2.png")));
        f5 = ImageIO.read((this.getClass().getResource("smiles/-5.png")));
        f4 = ImageIO.read((this.getClass().getResource("smiles/-4.png")));
        f3 = ImageIO.read((this.getClass().getResource("smiles/-3.png")));
        f2 = ImageIO.read((this.getClass().getResource("smiles/-2.png")));

        smile = new Easel(n);
    } catch (IOException e) {
        System.out.println("error");
    }

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Когда изображения упакованы в JAR, загрузчик классов может найти ваше изображение, если вы используете что-то вроде этого:

 this.getClass().getResource("/resources/icon.png")

                 OR

 this.getClass().getResourceAsStream("/resources/icon.png")

То есть в вашем случае код должен быть таким, как показано ниже:

try {
        n  = ImageIO.read((this.getClass().getResource("/smiles/n.png")));
        s5 = ImageIO.read((this.getClass().getResource("/smiles/5.png")));
        s4 = ImageIO.read((this.getClass().getResource("/smiles/4.png")));
        s3 = ImageIO.read((this.getClass().getResource("/smiles/3.png")));
        s2 = ImageIO.read((this.getClass().getResource("/smiles/2.png")));
        f5 = ImageIO.read((this.getClass().getResource("/smiles/-5.png")));
        f4 = ImageIO.read((this.getClass().getResource("/smiles/-4.png")));
        f3 = ImageIO.read((this.getClass().getResource("/smiles/-3.png")));
        f2 = ImageIO.read((this.getClass().getResource("/smiles/-2.png")));

        smile = new Easel(n);

} catch (IOException e) {
       System.out.println("error");
}

OR

try {
        n  = ImageIO.read((this.getClass().getResourceAsStream("/smiles/n.png")));
        s5 = ImageIO.read((this.getClass().getResourceAsStream("/smiles/5.png")));
        s4 = ImageIO.read((this.getClass().getResourceAsStream("/smiles/4.png")));
        s3 = ImageIO.read((this.getClass().getResourceAsStream("/smiles/3.png")));
        s2 = ImageIO.read((this.getClass().getResourceAsStream("/smiles/2.png")));
        f5 = ImageIO.read((this.getClass().getResourceAsStream("/smiles/-5.png")));
        f4 = ImageIO.read((this.getClass().getResourceAsStream("/smiles/-4.png")));
        f3 = ImageIO.read((this.getClass().getResourceAsStream("/smiles/-3.png")));
        f2 = ImageIO.read((this.getClass().getResourceAsStream("/smiles/-2.png")));

        smile = new Easel(n);

} catch (IOException e) {
       System.out.println("error");
}

Надеюсь, это служит вашей цели ...

Спасибо!

0 голосов
/ 05 марта 2012

Попробуйте это:

BufferedImage n  = ImageIO.read(new File("./smiles/n.png"));

Я предполагаю, что изображение n.png находится внутри папки smiles в папке вашего проекта.

...