递归方法在调试时有效,但在从JAR运行时会卡住

时间:2011-11-23 14:44:04

标签: java debugging netbeans recursion

我有以下方法来递归检索文件夹中的图像:

private Collection<Image> GetImages(File file) {
    Collection<Image> result = new LinkedList<Image>();

    if (file.isFile()) {
        result.add(new Image(file));
        return result;
    }

    for (File f : file.listFiles(new DirAndImagesFilter())) {

        if (f.isDirectory()) {
            {
                result.addAll(GetImages(f));
            }
        } else {
            result.add(new Image(f));
        }
    }

    return result;
}

这里是DirAndImageFilter代码:

public class DirAndImagesFilter implements FileFilter {

private final static String jpeg = "jpeg";
private final static String jpg = "jpg";
private final static String gif = "gif";
private final static String tiff = "tiff";
private final static String tif = "tif";
private final static String png = "png";

public boolean accept(File file) {
    if (file.isDirectory()) {
        return true;
    }

    String extension = getExtension(file);
    if (extension != null) {
        if (extension.equals(tiff)
                || extension.equals(tif)
                || extension.equals(gif)
                || extension.equals(jpeg)
                || extension.equals(jpg)
                || extension.equals(png)) {
            return true;
        } else {
            return false;
        }
    }

    return false;
}

/*
 * Get the extension of a file.
 */
static String getExtension(File f) {
    String ext = null;
    String s = f.getName();
    int i = s.lastIndexOf('.');

    if (i > 0 && i < s.length() - 1) {
        ext = s.substring(i + 1).toLowerCase();
    }
    return ext;
}

}

当我从Netbeans运行我的应用程序时,它工作正常,但是当我运行JAR文件(也是由Netbeans生成)时。我的应用程序陷入了这种方法。

据我所知,JAR文件的行为应与Netbeans中运行的应用程序完全相同。或者我在这里遗漏了什么?

1 个答案:

答案 0 :(得分:2)

是的,我以前遇到过这类事。我发现你在这里发布的代码没有任何问题。

我的猜测是你正在读取来自jar本身的文件。如果是这种情况,那就是你的问题。从jar中读取“文件”不起作用。

通常会在您尝试以下内容时发生:

SomeClass.class.getResource("myfile")

这可以通过使用输入流来解决,即

SomeClass.class.getResourceAsStream("myfile")

这是一个疯狂的猜测...希望它有所帮助。