问题如下 - 我在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
@MockerTim
非常感谢你的帮助 - 现在一切正常。此外,我设法找到了另一个障碍 - 它没有要求图像,因为电话是:“Fish.jpg”和图片是:“fish.jpg” - 难怪它找不到任何东西并且犯了错误。
再次感谢你,我真的很感激!
答案 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。
现在你的程序看起来像这样:
我对您的代码所做的更改:
在课程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'中描述文件的路径