在递归搜索jar文件中的图像时,“URI不是层次结构”

时间:2013-11-07 04:22:28

标签: java eclipse recursion jar uri

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

0 个答案:

没有答案