将文件夹中的所有图像转换为IconImages

时间:2012-12-27 22:13:42

标签: java jar embedded-resource imageicon

我正在试图弄清楚如何在我的Java程序中添加大量图像,而无需在代码中添加每个文件名。

因此,我想将所有.png张图片放入正确的文件夹中,然后将其放入IconImage,然后将其放入ArrayList

我现在得到的是这个。

private void fillList()
{
    File[] files = new File("C:/Users/marre/Google Drive/Java/lek/imageplay/src/img").listFiles();

    for (File f : files)
    {
        if (f.isFile()) 
        {
                ImageIcon tempIcon = new ImageIcon(getClass().getResource("/img/"+f.getName()));       
                List.add(tempIcon);
        }
    }
}    

这就像我想要的方式来获取所有图像的名称。但该文件只从绝对文件路径读取。

我可以使用什么来获得相同的结果,但是在.jar文件中有效(因此它从src/img/读取而不是整个c:/ bla bla ..)?

1 个答案:

答案 0 :(得分:0)

我不确定这是否有用但我在尝试获取jar文件中的文件时遇到了类似的问题。如果这对您有用,我的方法是使用ClassLoader获取jar中文件的URL:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
URL url = classLoader.getResource("src/img/");

检查jar内部以确保图像的目录结构,以便指定正确的相对路径。

请记住,jar是一个打包的表单,因此很可能会返回一个压缩文件(而不是一个简单的File对象)。你可能不得不涉足ZipFile

ZipFile folderInsideJar = new ZipFile(new File(url.getPath());
Enumeration<? extends ZipEntry> entries = folderInsideJar.entries();
while (entries.hasMoreElements()) {
     // ideally this would be your image file, zipped
    ZipEntry childFile = entries.nextElement();

    // ... etc ...
}

对于JBoss等环境,您可能还会获得虚拟文件(vfsfile / vfszip)。重点是,您可以通过查看结果URL.getProtocol()确定您要处理的内容。

ImageIcon也会显示constructor that takes a URL。在手动尝试检索zip文件之前,您可以试着尝试一下它是否处理“jar内部资源”案例。