ProblemWithTheJar the.jar - 图像不显示

时间:2011-10-20 12:35:30

标签: java

问题如下 - 我在java中用Eclipse编写程序。 生成的文件夹结构是主项目文件夹:Animal Classification / inside of it:bin /,images /,pics / in bin /文件夹:users / metropolia / allClasses.class

程序正常启动并正常工作 - >图像位于文件夹images / and pics / - >用户使用它们.metropolia.Hieararchy

但是当我通过Eclipse或通过CMD.exe创建一个.jar时 - >在与源文件夹不同的文件夹中,jar不显示图像,即使它们被打包在其中。在Hierarchy.class中,图像的路径是(“images / name.jpg”或“pics / name.jpg”)。

然后我尝试使用ClassLoader.getSystemResource(“images / name.jpg”) - 但现在eclipse和cmd.exe发出警告并且不启动程序 - >线程main中的NullPointerException =使用ClassLoader静态的行中的错误...

我真的很感激任何帮助

更新

http://users.metropolia.fi/~artemm/

从那里下载代码plz 它可以作为SFX存档下载,或者如果你害怕病毒只需下载通常的RAR存档

我真的很感谢你的帮助

主要类位于users / metropolia / Program.java

更新2:

@MockerTim

非常感谢你的帮助 - 现在一切正常。此外,我设法找到了另一个障碍 - 它没有要求图像,因为电话是:“Fish.jpg”和图片是:“fish.jpg” - 难怪它找不到任何东西并且犯了错误。

再次感谢你,我真的很感激!

2 个答案:

答案 0 :(得分:2)

您使用的路径不正确。

您应该在代码中使用以下路径: 分别为../../images/name.jpg../../pics/name.jgp

如上所述Nate,您可以使用“/”开始路径,并分别使用/images/name.jpg/pics/name.jpg

当您在班级images/name.jpg中使用users.metropolia.Hieararchy路径时,您的代码会尝试在文件夹name.jpg中查找文件users/metropolia/images。当然,它失败了。

有关详细信息,请参阅Locating resources in Java

以下是一个简单的例子:

package users.metropolia;

import java.net.URL;
import javax.swing.ImageIcon;

public class IconManager {
    /** Returns an ImageIcon, or null if the path was invalid. */
    public static ImageIcon loadImageIcon(String path) {
        URL imgURL = IconManager.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);
                return null;
        }
    }

    public static void main(String[] args) {
        // Using absolute (to jar) paths
        ImageIcon icon3 = loadImageIcon("/pics/spider.jpg");
        ImageIcon icon4 = loadImageIcon("/imagess/ant.jpg");
    }
}

更新

我已下载您的代码(来自your link),并添加了上述IconManager类,并使用其loadImageIcon()方法初始化您的anImages数组并{{1 } .class。 现在你的程序看起来像这样:

enter image description here

我对您的代码所做的更改:

在课程MyDrawPanel中:

Hierarchy

在课程for (int i = 0; i < options.length; i++) { //anImages[i] = new ImageIcon("/images/" + options[i] + ".jpg"); anImages[i] = IconManager.loadImageIcon("/images/" + options[i] + ".jpg"); listObj[i] = new RendObject(options[i], anImages[i]); } 中:

MyDrawPanel

当然,我在需要时从public MyDrawPanel(String x) { //picture = new ImageIcon(x).getImage(); picture = IconManager.loadImageIcon(x).getImage(); } 删除了“generic”。

备注:要让您的程序显示所选图像而不是蜘蛛图像,您应该进一步修改您的程序。

答案 1 :(得分:0)

要在META-INF文件夹中创建Jar文件时读取文件,必须创建'INDEX.LIST'文件'.LIST'是文件的扩展名。

在这个'INDEX.LIST'中描述文件的路径