首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当在Unix机器上的Java程序中使用FilenameFilter时,接收ClassNotFoundException

当在Unix机器上的Java程序中使用FilenameFilter时,接收ClassNotFoundException
EN

Stack Overflow用户
提问于 2012-05-24 17:58:50
回答 1查看 341关注 0票数 0

因此,我有以下代码:

代码语言:javascript
复制
File txtFileDir = new File(MAIN_DIR + "test");
FilenameFilter filter = new FilenameFilter() {
    @Override
    public boolean accept(File dir, String name) {
        return name.endsWith(".txt");
    }
}; 
File[] txtFiles = txtFileDir.listFiles(filter);

它在我的开发机器上运行得很好,它使用安装了Java1.6的windows。但是,当我将类移植到unix框时,它将继续运行,并尝试运行它,我在FilenameFilter行上得到了一个FilenameFilter。unix盒上也有Java1.6,所以我不知道会有什么问题。这并不是什么大不了的事情,因为有多种方法来完成同样的事情,但我只是好奇是否有人对它为什么不能在unix上工作有任何想法。

我也试过在unix框上编译代码,以查看这是否有任何区别,但没有。代码在unix框上编译得很好,但我仍然收到相同的错误。有人有想法吗?

更新

我解决了这个问题。显然,当我编译包含该类的代码时,它创建了一个附加的.class文件,文件名为我的类名,并附加了$1。所以我有了Test.class和Test$1类。一旦我保留了Test$1类文件,事情就正常工作了。我猜因为我创建的内部类,它需要那个二等文件吧?至少我认为这是一个内在的阶级。

不管怎样,谢谢大家的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-24 18:29:02

正如注释中所述,您应该首先验证是否使用了与另一台计算机相同的版本。检查路径中是否存在FilenameFilter的另一种方法是:

javap java.io.FilenameFilter

因此,如果上面的命令将FilenameFilter的类名和方法列出为

代码语言:javascript
复制
Compiled from "FilenameFilter.java"
public interface java.io.FilenameFilter{
    public abstract boolean accept(java.io.File, java.lang.String);
}

然后,FilenameFilter在您的路径上,不需要担心版本。

但是,如果出现错误,最简单的方法是复制包含几乎所有(绝对必要的)类文件的rt.jar,并将其替换为现有的rt.jar,该文件可能在/usr/include/jvm/....中,也可以在/usr/include/jvm/....中进行find (不要忘记进行备份,也可以通过提取FilenameFilter.class并通过java/io/检查FilenameFilter.class是否存在于rt.jar中)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10742853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档