2

コードにすべてのファイル名を追加することなく、多くの画像を 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);
        }
    }
}    

これは、すべての画像の名前を取得することに関して、私が望むように機能します。ただし、ファイルは絶対ファイルパスからのみ読み取ります。

同じ結果を得るために代わりに何を使用できますsrc/img/c:/ bla bla?

4

1 に答える 1

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 にはURL を受け取るコンストラクターがあるようにも見えます。zip ファイルを手動で取得する前に、「jar 内のリソース」のケースを処理するかどうかを確認するために、これを試してみてください。

于 2012-12-27T22:34:48.027 に答える