java.lang.NoClassDefFoundErrorによって引き起こされる:

私はこれをproramの下に持っています

package com;

    import java.io.PrintStream;
    import java.net.URL;
    import java.net.URLConnection;

    public class Caller
    {
      public static void main(String[] args)
      {
        try
        {
          URL url = new URL("http://localhost:8080/Test/Ravi.jsp");
          connection = url.openConnection();
        }
        catch (Exception ioe)
        {
          URLConnection connection;
          System.err.println("IOException: " + ioe.getMessage());
        }
      }
    }

私はこれを実行しているとき私は取得しています

C:\Program Files\Apache Software Foundation\apache-tomcat-6.0.33\webapps\Test\WEB-INF\classes>java com.Caller

Exception in thread "main" java.lang.NoClassDefFoundError: com/Caller
Caused by: java.lang.ClassNotFoundException: com.Caller
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: com.Caller.  Program will exit.
0
追加された 著者 Stephen C,
@StephenC:いいえ、別の原因で、別の例外です。
追加された 著者 Jon Skeet,
おそらく愚かな疑いがありますが、Caller.classがC:¥Program Files¥Apache Software Foundation¥apache-tomcat-6.0.33¥webapps¥Test¥WEB-INF¥classes‌¥comの下にあることを確認してください。もしそうでなければ、javacを使ってソースにコンパイルする必要があります。 Jonが答えて言ったように、なぜtomcatディレクトリの中からクラスを実行しようとしているのかは不明です
追加された 著者 aishwarya,

3 答え

Tomcatディレクトリからコンソールアプリケーションを実行しようとしている理由はまったく明らかではありませんが、基本的にクラスを見つけることはできません。

現在のディレクトリの下に com ディレクトリがあり、そのディレクトリに Caller.class というファイルがあるはずです。そうでない場合は、コードをどのようにコンパイルしたかを調べて修正する必要があります。

私の推測はあなたが今実行したことです:

javac Caller.java
java com.Caller

これにより、現在のディレクトリにクラスファイルが作成されます。これを修正するには2通りの方法があります。 -d を使用するだけでできます

javac -d . Caller.java
java com.Caller

または、 com ディレクトリを自分で作成するなど、パッケージ構造を反映した構造にソースファイルを移動する

mkdir com
move Caller.java com
javac com\Caller.java
java com.Caller

あるいは、バイナリファイルからソースを分離することもできます。

mkdir src\com
move Caller.java src\com
javac -d bin src\com\Caller.java
java -cp bin com.Caller
5
追加された
@Downvoter:コメントする気に?
追加された 著者 Jon Skeet,
素敵な要約オプション、+1
追加された 著者 Saket,

java コマンドを実行すると(コンパイルされたクラスが見つかるように)、 .class ファイルの場所をクラスパスに追加する必要があります。

したがって、 com ディレクトリに移動して、次の行を使用します。

java -cp . Caller
1
追加された
それは "間違った名前:com /発信者"かそれに類するものではありません。 Callerクラスはcomパッケージ内にあると宣言されています。
追加された 著者 Jon Skeet,
私はあなたが何を意味するか分からない - それは今でも間違っている。 OP はこれを行うべきではありません。それは動作しません。
追加された 著者 Jon Skeet,
@PavanKumar:それらは存在する可能性がありますが、間違った場所にある可能性があります。私たちに詳細情報を提供する必要があります(理想的には、最初に web-app ディレクトリにあるすべてのことを行う理由が含まれています)。
追加された 著者 Jon Skeet,
私の答えを更新するのにちょっと遅かったと思う:)
追加された 著者 Saket,
クラスが存在する、私は写真を投稿することはできませんが、まだエラーが続く、まったく同じでした。
追加された 著者 Pavan Kumar,

クラスが存在しないことを意味します。 Pls。プロジェクトを再構築し、Webサーバーに展開してみてください。

1
追加された
まあ、それは存在するかもしれないが、間違った場所にあるかもしれない。個人的には、最初にWebサーバーにコマンドラインアプリケーションを導入することはお勧めしません...
追加された 著者 Jon Skeet,
うん、あなたは正しい。彼は適切な場所と適切なパッケージ構造としてそれを置く必要があります
追加された 著者 Jwalin Shah,