我正在用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对象,以及在Internet上搜索具有相同问题的其他人,但都没有显示任何结果。我可以收集的是,URI不能作为A的结果,它必须通过一个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;
}