プロが教える店舗&オフィスのセキュリティ対策術

こんばんは。javaの勉強をしたいなぁと思ったのでJDK1.3を雑誌の付録CDを使ってインストールしました。そしてプログラム作ってコンパイルまでは行ったのですが、実行ができないのです。
エラーメッセージはExceptioninthread"main"java.lang.NoClassDefFoundError:ファイル名
とでていました。
どういった理由が考えられるでしょうか?多分プログラムは間違ってないと思うのですが、、、

A 回答 (5件)

ええと、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 です。

補足日時:2001/07/24 05:12
    • good
    • 0

クラスパスが通ってません。


java -cp . test
か、
Autoexec.batに
set classpath = .
を追加しましょう。

トップからJDKで検索すれば同じ質問が山ほどあります。

参考URL:http://www.okweb.ne.jp/search.php3?dummy=%83%81% …

この回答への補足

参考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はソースファイルが入っているディレクトリです。

補足日時:2001/07/24 15:32
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2001/07/25 05:12

プログラム自体に問題はありません。

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・・・・

のように、カレントディレクトリを検索するように、.の指定が必要になるのです。
    • good
    • 0
この回答へのお礼

ありがとうございました。やっと動きました。
パスについては本やホームページにたくさん載っていましたが、こんな事はひとつも書いてありませんでした。
皆さんどうやって知ったのでしょう?常識なのでしょうか?
とにかく本当に助かりました。ありがとうございました。

お礼日時:2001/07/25 05:11

うーん、はずしてるかもしれませんが...



実行するときのコマンドのパラメータは、どのようにしていますか?
ソースが sample.java の場合、javacすると sample.class ができますが、
これを実行するには、 java sample となります。 java sample.class
ではありません。javaコマンドのパラメータは、ファイル名ではなく、
クラス名でなければいけないからです。
この点は、私もやった間違いなので、もしや...と思って回答してみました。

OSがファイル名と拡張子の区切り文字として使用している「.」は、
Javaでは、クラスの区切り文字です。
つまり、java コマンドのパラメータを sample.class と
してしまうと、sample パッケージの class クラスを java しなさい、と
言っていることになってしまいます。
そういうクラスは存在していないので、現象のようなエラーメッセージが
出ているのではないでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2001/07/25 05:12

皆さんがおっしゃっているように、CLASSPATHに.を追加すると


カレントディレクトリをCLASSPATHの対象にするんでしたね。
忘れてました。私もそうなってました(^^;
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2001/07/25 05:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!