在java中,如何从jar文件检索图像?

在java中,如何从jar文件检索图像?,java,reference,jar,Java,Reference,Jar,我一直在将java项目导出到jar(从Eclipse)时遇到问题。我在jar中包含了一个名为images的文件。它包含我的项目使用的所有图像文件。问题是,我对这些图像的引用只有在项目不是jar形式时才起作用。我不明白为什么,我想知道我是否需要改变图片参考的措辞。这就是我对参考图像所做的: URL treeURL = null; Image tree = null; File pathToTheTree = new File("images/tree.png");

我一直在将java项目导出到jar(从Eclipse)时遇到问题。我在jar中包含了一个名为
images
的文件。它包含我的项目使用的所有图像文件。问题是,我对这些图像的引用只有在项目不是jar形式时才起作用。我不明白为什么,我想知道我是否需要改变图片参考的措辞。这就是我对参考图像所做的:

    URL treeURL = null;
    Image tree = null;
    File pathToTheTree = new File("images/tree.png");
    try {
        treeURL = pathToTheTree.toURL();
    } catch (MalformedURLException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    try {
        tree = ImageIO.read(treeURL);
    } catch(IOException e) {
        e.printStackTrace();
    }

很可能这是一个简单的问题,因为我是一个编码初学者。当这些引用都在一个jar中时,我需要做些什么来让它们工作呢?

其实很简单:您可以使用
java.lang.Class
java.lang.ClassLoader
中的各种
getResource()
方法。例如,在你的应用程序中,你可以只写

treeURL = getClass().getResource("/images/tree.png");

这将在jar文件根目录下的
images
目录中找到该文件。
getResource()
方法的优点在于,无论文件是否在jar中,它们都可以工作——如果
images
目录是磁盘上的真实目录,那么它仍然可以工作(只要
images
的父目录是类路径的一部分)。

这就解决了问题,非常感谢!但现在它不在Eclipse中运行,只以jar形式运行。。。有没有办法重新排列文件或代码来修复这个问题?您只需要确保/images包含在构建中,并且在运行时类路径上。哦,derp。好的,我也解决了。非常感谢你!我花了好几个小时试着做这件事..可能重复:&