私は Java でゲームをプログラミングしており、事前にすべてのスプライトをプリロードするシステムをコーディングしています。これを行うために、すべての .png ファイルの「img」ディレクトリを再帰的にチェックし、それらのパスを「preloadQueue」と呼ばれるリストに追加します。Eclipse では問題なく動作しますが、jar としてエクスポートして実行すると、次のエラーが発生します。
Exception in thread "main" java.lang.IllegalArgumentException: URI is not hierarchical
at java.io.File.<init>(Unknown Source)
at shipyard.Shipyard.preloadQueueDefaultImages(Shipyard.java:487)
at shipyard.Shipyard.init(Shipyard.java:123)
at shipyard.Shipyard.main(Shipyard.java:101)
URI のフォーマットに問題があるようですが、数時間試してみましたが、うまくいく方法が見つかりません。File オブジェクトを取得するさまざまな方法を試してみたり、同じ問題を抱えている他の人をインターネットで検索したりしましたが、結果は得られませんでした。私が収集できるのは、Aの結果としてURIが機能しないことです.jarファイルを通過する必要があるか、Bの結果として実際のファイルではなくディレクトリを参照していますが、どちらの問題の解決策も見つけることができませんでした.
これが私のコードです(コマンドラインエラーを参照するために486行目から始まります):
private void preloadQueueDefaultImages() throws URISyntaxException, UnsupportedEncodingException{
File imgDir = new File(getClass().getResource("/img/").toURI());
System.out.println("Image directory is: " + imgDir.getAbsolutePath());
for(File f : getAllFilesFromDirectory(imgDir)) if(f.getName().endsWith(".png")) preloadQueue.add(f.getAbsolutePath());
}
private List<File> getAllFilesFromDirectory(File dir){
List<File> files = new ArrayList<File>();
for(File f : dir.listFiles()){
if(f.isDirectory()) files.addAll(getAllFilesFromDirectory(f));
else files.add(f);
}
return files;
}