-4

私はJavaを学んでいます。私のサンプルのディレクトリは次のようなものです。

./src
./src/yxy
./src/yxy/pack
./src/yxy/pack/testf
./src/yxy/pack/testf/Person.java
./Hello.java
./Hello.class

./testpack
./testpack/yxy
./testpack/yxy/pack
./testpack/yxy/pack/testf
./testpack/yxy/pack/testf/Person.class
./testpack.jar

srcディレクトリはライブラリとして使用されます。Personクラスを提供します。
srcの出力は、testpackdirecotoryにあります。
testpackのディレクトリに従ってtestpack.jarを生成します。
Hello.javaはメインのJavaファイルです。Personクラスを使用します。

Person.javaのソースコードは次のとおりです。

package yxy.pack.testf;

public class Person {
  private String name;

  public Person(String name) {
    this.name = name;
  }

  public String getName() {
    return name;
  }
}

Hello.javaのソースコードは次のとおりです。

import java.io.*; //IOException
import java.util.*; //Enumeration

import yxy.pack.testf.Person;

public class Hello{

    public static void main(String[] args)throws IOException  {
        Person p=new Person("abc");
        Class cls=Person.class;
        ClassLoader clsLoader=cls.getClassLoader();
        String clsFile=cls.getName();
        System.out.println("end");
    }
}

次の方法を使用して、現在のディレクトリの下にtestpack.jarを生成します。

javac -verbose -d testpack src \ yxy \ pack \ testf \ Person.java
cd testpack
jar -cvf testpack.jar ./yxy
move testpack.jar ./../testpack.jar
cd..

次の方法を使用して、アプリをビルドして実行します。

javac-classpath
。\testpack.jarHello.javajava-classpath。\testpack.jarHello

これは私が得るエラーです:

    スレッド「メイン」の例外java.lang.NoClassDefFoundError:こんにちは  
    原因:java.lang.ClassNotFoundException:こんにちは  
            java.net.URLClassLoader $ 1.run(不明なソース)で  
            java.security.AccessController.doPrivileged(ネイティブメソッド)で  
            java.net.URLClassLoader.findClass(不明なソース)で  
            java.lang.ClassLoader.loadClass(不明なソース)で   
            sun.misc.Launcher $ AppClassLoader.loadClass(不明なソース)  
            java.lang.ClassLoader.loadClass(不明なソース)で  
    メインクラスが見つかりませんでした:こんにちは。プログラムは終了します。

私はこれが起こる理由はありません。どうすれば修正できますか?

javaこんにちは

    スレッド「main」の例外java.lang.NoClassDefFoundError:yxy / pack / testf / Person

            Hello.main(Hello.java:10)で
    原因:java.lang.ClassNotFoundException:yxy.pack.testf.Person
            java.net.URLClassLoader $ 1.run(不明なソース)で
            java.security.AccessController.doPrivileged(ネイティブメソッド)で
            java.net.URLClassLoader.findClass(不明なソース)で
            java.lang.ClassLoader.loadClass(不明なソース)で
            sun.misc.Launcher $ AppClassLoader.loadClass(不明なソース)
            java.lang.ClassLoader.loadClass(不明なソース)で
            ... あともう1つ

どうすればこれを修正できますか?

===とにかく、私は修正する方法を見つけました。cmdで以下を使用するだけです。

>java -classpath testpack.jar;. Hello

testpack.jarと現在のパスを追加する必要があります。クラスパスに。

4

1 に答える 1

2

それは多くのことかもしれません。Javaの初心者の場合はIDEから始めることをお勧めしますが、これが必要ない場合は、JavaでNoClassDefFoundErrorを解決する3つの方法のリンクを次に示します。

このエラーが発生する理由を説明する別のユーザーからの抜粋もあります。

パッケージ内にクラスファイルを作成してから、パッケージ内からプログラムを実行しようとすると、常にこのエラーが発生します。解決策は、ファイルシステムのレベルを1つ上げて、パッケージの内容ではなく、パッケージのレベルになるようにすることです。

たとえば、パッケージの名前がgreetingsで、クラスファイルの名前がHelloWorldの場合、プログラムには次の行が含まれます。

パッケージの挨拶;

パッケージ名は、ファイルシステム内のディレクトリ(C:\ Java \greetingsなど)に対応しています。クラスファイルはそのディレクトリ内にあります。つまり、ファイル名はC:\ Java \ greetings\HelloWorld.classです。

c:\ Java \greetingsに配置してから実行する場合:

java HelloWorld

NoClassDefFoundエラーが発生します。1つのディレクトリ、この場合はC:\ Java \greetingsではなくC:\ Javaに移動し、次のようにします。

javagreetings.HelloWorld

あなたのプログラムはあなたのために働くはずです。

于 2012-07-17T17:07:12.960 に答える