0

だから私は次のコードを持っています:

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);

Java 1.6がインストールされたWindowsを使用する私の開発マシンでは問題なく動作します。ただし、クラスを unix ボックスに移植して実行しようとすると、FilenameFilter 行で ClassNotFoundException が発生します。UNIXボックスにはJava 1.6も搭載されているため、何が問題なのかわかりません。これと同じことを達成する方法は複数あるので、大したことではありませんが、UNIX ボックスで動作しない理由について誰か考えがあるかどうか知りたいです。

違いがあるかどうかを確認するために、UNIXボックスでもコードをコンパイルしようとしましたが、違いはありませんでした。コードは UNIX ボックスで正常にコンパイルされますが、それでも同じエラーが発生します。誰にも考えはありますか?

アップデート

私は問題を理解しました。どうやら、そのクラスを含むコードをコンパイルすると、クラスの名前と $1 が追加された追加の .class ファイルが作成されたようです。したがって、Test.class と Test$1.class がありました。Test$1.class ファイルを保持すると、正常に機能しました。私が作成した内部クラスのために、その2番目のクラスファイルが必要だと思いますか? 少なくとも私はそれが内部クラスだと思います。

とにかく、助けてくれてありがとう。

4

1 に答える 1

1

コメントに記載されているように、最初に別のマシンと同じバージョンを使用していることを確認する必要があります。FilenameFilter がパスにあるかどうかを確認する別の方法は次のとおりです。

javap java.io.FilenameFilter

したがって、上記のコマンドの場合、FilenameFilter のクラス名とメソッドを次のようにリストします。

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/....findFilenameFilter.classrt.jarjava/io/

于 2012-05-24T18:29:02.153 に答える