0

我正在用 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;
}
4

0 回答 0