- ベストアンサー
JDKをインストールしたのですが、、、
こんばんは。javaの勉強をしたいなぁと思ったのでJDK1.3を雑誌の付録CDを使ってインストールしました。そしてプログラム作ってコンパイルまでは行ったのですが、実行ができないのです。 エラーメッセージはExceptioninthread"main"java.lang.NoClassDefFoundError:ファイル名 とでていました。 どういった理由が考えられるでしょうか?多分プログラムは間違ってないと思うのですが、、、
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
プログラム自体に問題はありません。moyuruさんの指摘が正解ですね。 CLASSPATHは不思議な動きをします。 Java2以降の場合ですが、 □CLASSPATHに指定がされていない場合 カレントディレクトリとJAVA_HOMEで指定されたディレクトリのlib/tools.jarとJAVA_HOMEで指定されたディレクトリの/jre/lib/extが対象になります。 □CLASSPATHに指定がされている場合 CLASSPATHに定義されたディレクトリ、jarとJAVA_HOMEで指定されたディレクトリのlib/tools.jarとJAVA_HOMEで指定されたディレクトリの/jre/lib/extが対象になります。 つまり、CLASSPATHに指定をするとカレントディレクトリが検索対象からはずれてしまうのです。このため、 SET CLASSPATH=.;C:\TOMCAT\Lib・・・・ のように、カレントディレクトリを検索するように、.の指定が必要になるのです。
その他の回答 (4)
- BLACKTALON
- ベストアンサー率37% (110/293)
皆さんがおっしゃっているように、CLASSPATHに.を追加すると カレントディレクトリをCLASSPATHの対象にするんでしたね。 忘れてました。私もそうなってました(^^;
お礼
ありがとうございました。
- misoka
- ベストアンサー率35% (56/160)
うーん、はずしてるかもしれませんが... 実行するときのコマンドのパラメータは、どのようにしていますか? ソースが sample.java の場合、javacすると sample.class ができますが、 これを実行するには、 java sample となります。 java sample.class ではありません。javaコマンドのパラメータは、ファイル名ではなく、 クラス名でなければいけないからです。 この点は、私もやった間違いなので、もしや...と思って回答してみました。 OSがファイル名と拡張子の区切り文字として使用している「.」は、 Javaでは、クラスの区切り文字です。 つまり、java コマンドのパラメータを sample.class と してしまうと、sample パッケージの class クラスを java しなさい、と 言っていることになってしまいます。 そういうクラスは存在していないので、現象のようなエラーメッセージが 出ているのではないでしょうか?
お礼
ありがとうございました。
クラスパスが通ってません。 java -cp . test か、 Autoexec.batに set classpath = . を追加しましょう。 トップからJDKで検索すれば同じ質問が山ほどあります。
お礼
ありがとうございました。
補足
参考URL等を頼りにやってみたのですが、どうしても出来ません。 Autoexec.bat @ECHO OFF rem C:\PROGRA~1\MCAFEE\VIRUSS~1\SCANPM.EXE C:\ rem @IF ERRORLEVEL 1 PAUSE SET PATH=%PATH%;C:\jdk1.3\bin SET CLASSPATH=C:\Program Files\PD2\AdobeConnectables;C:\jdk1.3\bin\program loadhigh c:\windows\nlsfunc.exe c:\windows\country.sys 追加したのは SET PATH==%PATH%;C:\jdk1.3\bin\ と SET CLASSPATHの;C:\jdk1.3\bin\program の部分なんですが、どこが間違ってるか教えてはいただけないでしょうか? binの下のprogramはソースファイルが入っているディレクトリです。
- BLACKTALON
- ベストアンサー率37% (110/293)
ええと、hoge.javaというファイルにプログラムを作成し、 mainメソッドがあるクラス名もhogeだとします。 コンパイルするとhoge.classをはじめとするいくつかのclassファイルが できるはずです。(hoge.classしかないかもしれません) それで、実行するときは java hoge と入力するのですが、hoge.classまで入力していないでしょうか。 あるいは、そのclassファイルがあるディレクトリで実行しているでしょうか。 そうでない場合は適切にclassファイルの場所を指定する必要があります。
補足
早速の回答ありがとうございます。 はい。実行するときは java Test としています。(ファイル名はTest.java) ディレクトリもそのファイルがあるところで実行しています。 私は学校のパソコンではすでにJDKを経験済み(とは言ってもちょっとかじった程度ですが)なので、多分コマンド関係は大丈夫だと思うんですよ。 でも、パソコンについてはほとんど素人でして、設定の仕方に問題があるのかなと思っています。 もし、これかなっていうのがあればぜひ教えてください。 ちなみにソースは class Test{ public static void main(String args[]){ int A,B; A=1; B=2; int C=A+B; System.out.println("A+B="+C); } } です。 MS-DOSで javac Test.java java Test こう入力しています。 OSは WINDOWS95 です。
お礼
ありがとうございました。やっと動きました。 パスについては本やホームページにたくさん載っていましたが、こんな事はひとつも書いてありませんでした。 皆さんどうやって知ったのでしょう?常識なのでしょうか? とにかく本当に助かりました。ありがとうございました。