9

エラーが発生しています

スレッド「メイン」の例外 java.lang.NoClassDefFoundError:

Ubuntuでコンパイル済みのクラスを実行しようとすると。私は非常に単純な Helloworld の例を使用しています。インターネット上に既に存在する何百万もの応答は、私の CLASSPATH および JAVA_HOME 変数が正しく設定されていないことを示唆しています。

ただし、etc/environment を現在のフォルダーと同様に正しいフォルダーに編集しました。

PATH=".:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

JAVA_HOME="/usr/lib/jvm/java-1.5.0-sun/"

CLASSPATH=".:/usr/lib/jvm/java-1.5.0-sun/lib"

set コマンドを入力すると表示されます。いずれにせよ、クラスパスを手動で設定しても

sudo java -cp . myfirstjavaprog.class

同じエラーが発生します。他にどこを見ればいいですか?これは構成の問題に違いありません。

どうもありがとう

4

8 に答える 8

6

最後から .class を削除したい。入力するだけ...

java -cp . myfirstjavaprog
于 2009-12-29T17:02:48.203 に答える
5

CLASSPATH 環境変数を削除するか、少なくとも JRE/JDK を削除することを強くお勧めします。

"."特に指定しない限り、クラスパスに暗黙的に存在します。そして Java 1.3 の頃から、Java は javac/java 実行可能ファイルの実行パスに基づいて独自のランタイムとライブラリを見つけるほど賢くなってきました。それ以来、クラスパスでそれらを指定することは、完全に間違っていないとしても、冗長でした。.../libそこにはjarしかなく、クラスはなく、個別かつ明示的に名前が付けられていない場合、それらはクラスパスから取得されないため、確かに正しくありません。

java <classname>最新の java は、クラスパスのルート ディレクトリに立っているときに入力するだけで十分にスマートであり、Just Work™ になります。

于 2009-12-29T17:26:21.837 に答える
1

使用する

sudo update-java-alternatives -s java-6-openjdk

多くのクラスパスを設定します。

于 2011-05-14T18:58:12.297 に答える
1

リンゴとオレンジを混ぜています。コマンド ラインでの生の Java または javac 呼び出しには、そのクラスにアクセスできる場所を知るためのクラスパスが必要です。走るとき

java -cp pathelement1:pathelement2... MyClass

実行可能なクラスを見つける場所のリストをJavaに与えています。指示しない限り、「.」を含む他の場所を検索することはありません。したがって、実行しない限り、「CLASSPATH」は役に立ちません

java -cp $CLASSPATH MyClass

言い換えれば、クラスパスを再入力し続けるための単なるショートカットです。

多くのプログラムは JAVA_HOME を使用するように構成されていますが、最終的に Java プログラムを実行するには、構成済みのクラスパスと Java へのパスが必要です (JAVA_HOME 変数を介して検索されるため、ant のようなものには依然として必要ですが、概念的には単なるショートカットにすぎません同じように)。

PATH は、システムがバイナリを探すパスです。Java がパス上にない場合 ("which java" と入力すると、パス上に Java があれば表示されます) /full/path/to/java を実行することは、単に "java" を実行してシステムを持っていることと同じです。 PATH 変数でバイナリを見つけます。

于 2009-12-29T17:28:51.100 に答える
1

いいえ、CLASSPATH 環境変数が無視されていると思います。

これを行う正しい方法は、コンパイルおよび実行時に -classpath オプションを使用することです。プロジェクトごとに設定します。あなたの目の前にある証拠は、そうであることを教えてくれます。

CLASSPATH が無視されるのはなぜですか? いくつかの理由:

  1. これは、支持されなくなった Java 1.0 アーティファクトです。
  2. JVM は、環境変数として設定されていることを保証しません。
  3. IDE には独自の要件があるため、それに依存しません。
  4. Java EE アプリ サーバーには独自の要件があるため、それに依存しません。
  5. すべてのプロジェクトが異なる可能性があるため、毎回パス全体を指定する必要があります。「Hello, World」を過ぎると、スクリプトを作成したり、プロジェクトの CLASSPATH を設定するのに役立つ Ant や Maven などのツールを使用したりすることができます。
于 2009-12-29T17:03:11.993 に答える
0

java_home変数を設定するための手順は、次のとおりです。

http://luckydev07.blogspot.com/2009/08/setting-javahome-in-ubuntu-linux.html

クラスパスも同様に設定できます

于 2009-12-29T17:09:20.980 に答える
0

Sunのチュートリアルをじっくりとご覧になることを強くお勧めします。それは後であなたを助けます-クラスパスは悪名高いトラブルメーカーです。

http://java.sun.com/docs/books/tutorial/getStarted/TOC.html

于 2009-12-29T17:13:39.943 に答える
0

わかりました、間違った場所で問題を探していました。Java は正常であることが判明し、私は 2 つの別々の問題で同じエラーが発生するという被害を受けました。

私はもともと、Java Web サイトから取得したスイングの例を実行しようとしていましたが、パッケージ定義があることに気づきませんでした。正しいフォルダー構造をセットアップしたので、正常に動作するようになりました。

HelloWorld の例を実行しようとしたときに、誤って .class 拡張子を含めてしまいました。

これらの問題は両方とも ClassNotFound エラーを引き起こしました。

大変お世話になりました。

于 2009-12-29T18:13:49.183 に答える