2

人々がこのエラーを解決した他のスレッドを見つけました。ただし、すべてが完全修飾クラスパスを使用していませんでした。Class.forName を機能させることができないようで、完全修飾パスを使用しています。

CLI からのコンパイルと ItelliJ Idea の使用をテストしました。どちらも同じエラーで失敗します。

コード (テスト ディレクトリ内):

package test;
public class Test {
  public static void main(String[] args) {
    Class cls = Class.forName("java.util.ArrayList");
  }
}

エラー:

java.lang.ClassNotFoundException; キャッチするか、投げることを宣言する必要があります

上記の例は機能しません。前もって感謝します!

4

5 に答える 5

6

ClassNotFoundExceptionチェック例外であるため、このメッセージが表示されます。これは、この例外を無視できないことを意味します。それをコンストラクトで囲んで例外処理を提供するか、メソッドに句をtry/catch追加して呼び出し先で処理する必要があります。throws

編集:Class.forName()コンパイル中にコンストラクトが解決されないことに 注意してください。このようなステートメントを作成すると、プログラムの実行中にロードされていない可能性のあるクラスを探すように JVM に指示することになります。Java ライブラリは、静的にリンクされるのではなく動的にリンクされます。つまり、それらのコードはプログラム コードに組み込まれず、要求されたときにのみ読み込まれます。これが をスローする理由ClassNotFoundExceptionです。

于 2014-03-16T04:55:17.563 に答える
1

Class.forName("java.util.ArrayList")メソッドはチェック済み例外をスローするように宣言されているため、次のようにブロックClassNotFoundException内で処理する必要がありますtry/catch

package test;
public class Test {
  public static void main(String[] args) {
    try {
        Class cls = Class.forName("java.util.ArrayList");
    } catch (ClassNotFoundException e) {
    // Handle it here
    }
  }
}
于 2014-03-16T04:57:02.927 に答える
1

これを試して:

try{
  Class cls = Class.forName("java.util.ArrayList");
}catch(ClassNotFoundException e){
  ... do messaging or logging
}

またはthrow ClassNotFoundExceptionメソッドの署名で:

public static void main(String[] args) throws ClassNotFoundException {
于 2014-03-16T05:01:07.590 に答える
0

次の 2 つのオプションがあります。

  1. try-catchブロックで囲み、適切な処理を行います。

    package test;
    public class Test {
      public static void main(String[] args) {
        try {
            Class cls = Class.forName("java.util.ArrayList");
        } catch(ClassNotFoundException e)  {
            System.out.println("This is not a very serious exception, or at least Test knows how to handle it");
        }
      }
    }
    
  2. 呼び出し元のメソッドが何をすべきかを知っていることを期待して、メソッドの外に投げます。

    package test;
    public class Test {
      public static void main(String[] args) throws ClassNotFoundException {
        Class cls = Class.forName("java.util.ArrayList");
      }
    }
    
于 2014-03-16T04:59:43.403 に答える
0

上記の回答のいずれも、このエラーが発生した理由を説明できない理由がわかりません。私もできませんが、かつてこの問題に遭遇し、使用して解決しました

Thread.currentThread().getContextClassLoader().loadClass($YOUR_CLASS_NAME)

それがあなたの問題を解決できることを願っており、誰かが私たちに説明をしてくれることを願っています.

于 2016-11-28T12:30:24.760 に答える