コンパイル後、実行するとコードはどのようなものでも、同様のエラーメッセージが表示されます。
例えば、超基本の下記のソースでも表示されます。

//Sample01.java
class Sample01
{
public static void main (String args[])
{
System.out.println("Hello World");
}
}

エラーメッセージは同様に、
「Excption in thread "main"java.lang.NoClassDefFoundError: Sample01」
と表示されてしまいます。
このエラーの対処方法をお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

どうも、#1です。



実行できるようになって、良かったですね。これからもがんばってください。

さて、お礼のところにもう1個質問が書いてあったので、それにお答えしますと。

パスを設定するときにWin98ならAutoExec.bat、Win2000もしくはXPだとシステムから環境変数で設定したと思いますが、そこに新規でCLASSPATHというのを作ります。で、値を D:\Java となります。
#1のお礼のところには、D:\Java\Practiceとなっていますが、もし、こっちをフォルダとして使っているならこっちを指定してください。

ようするに、作業フォルダをクラスパスとすればよいです。作業フォルダを新規に作ったときは、環境変数も付け足すなりなんなりしなくてはいけません。

僕も、前はクラスパスなしで実行できたんですが、最近は駄目なんですけど、なんでですかね?Javaバーチャルマシンの仕様だと、カレントディレクトリもClassファイルを探してくれると聞いたんですが。。。その辺は、謎です。

では、がんばってください。

参考URL:http://www.wikiroom.com/java/
    • good
    • 0
この回答へのお礼

度々ご回答いただきましてありがとうございます。
おかげさまで実行できるようになりました。
私もjdk1.3の時はCLASSPATHの設定無しで問題が無かったのですが、
一度、j2sdk1.4.2_01をインストールしたところ、
アンインストールしても今回の様になってしまいました。
SDKの使用が変わってしまったようですね。
本当に今回は助かりました、また何かありましたら宜しくお願いいたします。

お礼日時:2003/10/18 13:25

クラスパスが云々という話はJavaプログラミングをするうえで避けては通れない道ですが、何にせよCLASSPATHについて理解のないまま環境変数でCLASSPATHを設定するのはあまりお勧めできません。



PATH環境変数の設定は必須ですが、CLASSPATH環境変数は設定しなくても動きます。むしろ、下手にCLASSPATH環境変数を設定すると、No.2の回答の補足にあるようなエラーが出る羽目になります。

クラスパスは、No.1やNo.2の回答にあるように、-cp (あるいは -classpath でも同じことですが)コマンドを使って指定するのが推奨されていますので、それに従うのが良いと思います。

なお、CLASSPATH環境変数でも -cp コマンドでもクラスパスを設定しなかった場合は、カレントディレクトリが自動的にクラスパスになります。カレントディレクトリを変えるだけで、事実上クラスパスも変えることができるので、はじめのうちはこの「クラスパスをまったく設定しない」方法をお勧めします。


もちろん、クラスパスを環境変数で設定しないほうが良いというのには、理由があります。今回は D:\Java\Practice フォルダにクラスファイルを置かれているようですが、例えば次に D:\Java\Practice2 という新たなフォルダに別なプログラムを作って実行するとなったらどうでしょうか。プログラムが変わるたびに環境変数をいちいち設定し直していたのでは切りがありません。
そもそも環境変数というのは、状況に応じて頻繁に変更されるというような設計にはなっていないのです。
OS全体の「環境」に関する設定をするためにあるのであって、たかが一つのクラスファイルのためだけにCLASSPATH環境変数を使うというのは誤りなのです。
個々のプログラムに対してクラスパスを設定するには、No.3の回答にあるようにそれぞれのコマンドプロンプトでCLASSPATHを設定するとか、あるいは -cp コマンドを使うというのが正式な作法なのです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
以前JDK1.3を使っていたときは、
特にCLASSPATH環境変数の設定無しで、
実行できたいのですが、今回j2sdk-1_4_2_01を、
入れてみたところ、エラーが出てしまいました。
UKYさんのおっしゃるとおり-cpを使うべきだとは
思うのですが、フリーソフトのCPad for Java2SDKという、
ソフトを使う都合上-cpを付けずに実行したかったのです。
ただ、ソフトの方で環境変数の設定ができまして、
解決できました。
また、何かありましたらアドバイスを宜しくお願いいたします。

お礼日時:2003/10/18 13:42

pathはjavaやjavacのあるファイルを指定


例えば、c:\jdk1.3\bin
classpathはclassファイルがあるファイルを指定ですよ

プロンプト画面で、set classpathでclasspathがどうなってるのか見れますよ。pathはset pathです。環境変数でも変えられますが、コマンドの後ろに=をつければ、プロンプト画面でも変えられます。変わったら普通にやれますよ。
頑張ってください。 例 set classpath=c:\JData
分かるといいな…
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
分かりました、実行できるようになりました。

お礼日時:2003/10/18 13:20

FAQなのですが,過去質問を探すのも面倒なので..。



CLASSPATHにカレントディレクトリ(.)が入っていないのが原因ではないかと思います。

java -classpath . Sample01

として実行してみてください。

参考URL:http://www2s.biglobe.ne.jp/~yuuki_ki/java_basic2 …

この回答への補足

ご回答ありがとうございます。
java -classpath . Sample01 と入力したところ、
問題なく実行することができました。
以前は問題なく実行できていて、環境変数などを
いじった覚えもないのですが、久しぶりにJAVAをやったところ、
今回のようなエラーが表示されてしまいました。
参考URLも拝見させていただきましたが、
-classpathをつけずに実行するためには、
環境変数の設定を行わなければいけないかと思いますが、
ユーザー環境変数にどのように設定を行えばいいのでしょうか?
変数名:CLASSPATH
変数値:D:\jdk1.3\bin
と設定してみたのですがエラーになってしまいました。
設定の仕方を教えていただけると助かります。

補足日時:2003/10/17 13:29
    • good
    • 0

作業フォルダが○○だとします



java -cp C:\○○ Sample01

この回答への補足

ご回答ありがとうございます。
java -cp D:\java\Practice Sample01
と実行したところ正常に動きました。
以前は-cpを付けずに問題なく動いていたのですが、
環境変数にどのような設定を行えば-cpを付けずに
動くのか、お分かりになるようでしたら、
教えていただけませんでしょうか?
私の環境ですが、
プログラム本体が、D:\jdk1.3、
保存先が、D:\java、
になります。

補足日時:2003/10/17 13:30
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QJavaのダウンロードについて

さっきパソコンの電源をいれたら

ダウンロード準備完了  Java(TM) Update

Java(TM) Updateを使って最新版をコンピュータにダウンロードすることができます。
最適なセキュリティーとパフォーマンスのため、今すぐ最新版をダウンロードすることをお勧めします。

Java(TM)6 Update 2 Available
Java(TM)6 Update 2 includes features and fixes to accelerate
your Java applications as well as updates to keep Java secure.

後で通知する   ダウンロード

という表示がでたのですが、ダウンロードしても問題ないのでしょうか?

Aベストアンサー

こんばんは
お持ちのPCにJavaがインストールされていれば Updateは自動で配信されます 
Java(TM)6 Update 2は今のJavaの最新ですから ダウンロードしても問題は有りません
ただ Javaはかなりの容量を使いますから(140MB位)新しいのを入れたら 以前のバージョンは削除した方がいいですよ
UpdateでHDDが一杯に成ってしまいますからね
                            参考まで

QInteger.parseInt()について public static void main(String[] args) { int a =

初歩的な質問だと思うのですが、、、

public class TestTree {

public static void main(String[] args) {

int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);

GreatTree myTree = new GreatTree(a, b);
myTree.makeTree();
myTree.makeGround();
}

}

というプログラムについて、Integer.parseInt()はどういう意味を持つのかがわかりません。ただ適当につけた名前だとは思えないです。教えてもらえたら幸いです。お願いします。

Aベストアンサー

> argsで入力されたものは例え数字でも文字列として扱われているから、それをintにしている。ということですよね?

引数として (String[] args) と設定されていますので、
おっしゃるとおり 引数 args[]配列に入っているものは、文字列です。

ポイントは、 「String[]」でしょうか。。

QJAVAダウンロード出来ません。

JAVAソフトウェアダウンロードのページでダウンロードを試みましたが、
http://www.java.com/ja/
ダウンロードを開始すると
"設定を確認中"と出てダウンロードが開始されません。
どうすればダウンロードできますか?

Aベストアンサー

手動で一旦ダウンロードしてから、インストールもできませんか?
http://www.java.com/ja/download/manual.jsp

Qclass Test_A {  main(){}}の実行順序は?

public class Test_A {
public static void main(){

int a = 0;
int b = 1;

}
}
例えば上のようなサンプルで何故 main()がクラスTest_A の中に挟まっているのでしょうか?実行順序としては main()が終了したら、クラスTest_A の方はどうなるのでしょうか? main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。よろしくお願いします。 

Aベストアンサー

>main()がクラスTest_A の中に挟まっているのでしょうか

Javaは、全てのプロパティ、メソッドはどこかのクラスに属していないといけないからです。
mainメソッドであっても例外ではありません。

>main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。

これを考える上で最も重要なのはmainメソッドがstaticであることです。
staticなメソッドは、そのクラスのインスタンスを作らなくても、
つまり、new Test_A();としなくても実行することが可能です。
プログラム実行時には、Test_Aクラスのインスタンスは生成されません。
質問のコードでは変数a,bに値が代入され、それで終わりです。

Javaでは、(正確にはJavaVMは)実行するclassファイルにある、
String[]引数を持ったvoid mainメソッドを実行する仕様になっています。
しかし、mainメソッドを実行するときには何のインスタンスも生成されていないので、
何かのインスタンスのメソッドを実行することはできません。
なので、staticなメソッドでないとJavaVMが実行できないのです。
さらに、JavaVMからアクセス可能なスコープを与える必要があるので、
publicである必要もあるのです。

あとは、そのmainメソッドに指定されたコードを実行し、mainメソッドの最後まで処理が進んだら
そこでJavaVMが終了し、プログラムも終了します。

※細かい話ですが、main()からプログラムは始まりません。
正確に言うと、引数なしのmain()メソッドは他のメソッドと何ら代わりがありません。
プログラムを始めるには、
アクセススコープがpublicで、staticな戻り値のなく、引数にString配列を取るmainメソッド
であることが必要です。つまり、
public static void main(String[] args)
とするのが通常です。
試しに質問のコードをjavaコマンドで実行すると、NoClassDefFoundErrorが出るはずです。

>main()がクラスTest_A の中に挟まっているのでしょうか

Javaは、全てのプロパティ、メソッドはどこかのクラスに属していないといけないからです。
mainメソッドであっても例外ではありません。

>main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。

これを考える上で最も重要なのはmainメソッドがstaticであることです。
staticなメソッドは、そのクラスのインスタンスを作らなくても、
つまり、new Test_A();としなくても実行することが可能です。
プログラム実行時...続きを読む

QJAVA開発キットのダウンロード法。

プログラミング全くの初心者ですが、JAVAを始めてみたいと思っています。ところがJAVAの入門書を手に入れたところ、JAVAの開発キットをダウンロードしようとしてみましたが、入門書が古いせいか、そのダウンロードサイトの様子が変わっていたり、また英語表記だったりして自分なりにいろいろとやってたものの、よくわかりません。どなたか、最新のJAVA開発キットのダウンロード法を詳しく教えて頂けないでしょうか…。使用OSは、WindowsXPです。

Aベストアンサー

Windows版でいいんですよね?
下記のURLから、

・「JDKのダウンロード」をクリック
・「ACCEPT」にチェック
・Windows Platform - J2SE(TM) Development Kit 5.0 Update 6の「Windows Offline Installation, Multi-language」をクリック
・もう一度 Windows Platform - J2SE(TM) Development Kit 5.0 Update 6の「Windows Offline Installation, Multi-language」をクリック

で、ダウンロード出来ます。

参考URL:http://java.sun.com/j2se/1.5.0/ja/download.html

Q「Exception in thread "main" java.lang.NoClassDefFoundError: CUSTOMER」エラー

Oracle9i R2にJDBCで接続してCUSTOMER表のレコード件数を調べる単純なJavaプログラムをつくろうとしています。

以下のソースをOracle端末上で実行すると「Exception in thread "main" java.lang.NoClassDefFoundError: CUSTOMER」というエラーメッセージが表示されます。

環境設定としてCLASSPATHにclasses12.zipのパスを通しました。

-------------------------------------------------
// JDBC APIのインポート
import java.sql.*;class CUSTOMER {
public static void main (String args[])
throws SQLException, ClassNotFoundException {

// JDBC Driverの登録
Class.forName("oracle.jdbc.driver.OracleDriver");

// Oracle9iに接続
Connection conn =
DriverManager.getConnection ("jdbc:oracle:thin@192.168.0.10:1521:testdb", "test", "test");

// ステートメントを作成
Statement stmt = conn.createStatement();

// 問い合わせの実行
ResultSet rset = stmt.executeQuery("SELECT COUNT(*) FROM CUSTOMER");

// 問い合わせ結果の表示
while ( rset.next() ) {
// 列番号による指定
System.out.println(rset.getInt(1) + "\t" + rset.getString(2));
}

// 結果セットをクローズ
rset.close();

// ステートメントをクローズ
stmt.close();

// 接続をクローズ
conn.close();
}
}
-------------------------------------------------
何かおわかりの方いらっしゃいましたら教えて下さい。宜しくお願いします。

Oracle9i R2にJDBCで接続してCUSTOMER表のレコード件数を調べる単純なJavaプログラムをつくろうとしています。

以下のソースをOracle端末上で実行すると「Exception in thread "main" java.lang.NoClassDefFoundError: CUSTOMER」というエラーメッセージが表示されます。

環境設定としてCLASSPATHにclasses12.zipのパスを通しました。

-------------------------------------------------
// JDBC APIのインポート
import java.sql.*;class CUSTOMER {
public static void main (String args[])
...続きを読む

Aベストアンサー

thin@ではなくthin:@です。

QJAVAのコンパイラのダウンロードについて

 最近、JAVAを勉強しようと思い、JAVAのコンパイラができるというJDKと呼ばれるものををダウンロードしようとしたのですが、ページが英語のせいでどうすればダウンロードできるのか全く分かりません。

 今のところ、勉強するだけなので無償と言うこれをダウンロードしたいのですが、いったいどこをどうすれば落とせるんでしょうか。

 あと、ほかにもForte for Javaを使えば便利と聞いたのですが、確かJAVAはテキストエディタとJDKがあれば作れると聞いたのですが、これはどういうことなのでしょうか。

 JAVAを始める以前の問題のような気もしますが、初心者なので誰か教えてください。

Aベストアンサー

http://java.sun.com/j2se/1.3/ja/download-windows.html を開いたら、
ページのやや下のほうにある、

Java 2 SDK, v 1.3.1_02 ソフトウェア Windows 95 / 98 / 2000 / NT 4.0 /Me (Intel プラットフォーム) 版のダウンロード

のところにあるcontinueボタンを押します。
そうすると、英語で使用契約書が表示されるので、
ページの最下部にあるACCEPT(同意する)というボタンを押すと、ダウンロード画面に進みます。
たくさんボタンが並んでいますが(やっぱり英語)、どれか1つをクリックするとダウンロードが始まります。

こんな感じでダウンロードがんばってください。

Q"try{}catch(){}"文で"close()"はどのように書けばよいのでしょうか。

こんにちは、片岡と言います。

プログラム1は、Java言語で学ぶデザインパターン入門(結城浩さん著)の
433ページを参考にして書きました。

私は、プログラム1のclose()の書き方よりもプログラム2のようなclose()の書き方が、
良いと思っています。
なぜならば、プログラム1では、out.writeObject(memento)行の例外によって、
close()が実行されないからです。

私のこの考え方は正しいのでしょうか。
もっと良いclose()の書き方はあるのでしょうか。
ご存知の方はいらっしゃいませんか。

●プログラム1
public class Main {
public static void saveMemento(Memento memento) {
try {
ObjectOutput out = new ObjectOutputStream(new FileOutputStream("game.dat"));
out.writeObject(memento);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
… //以下略
}

public class Memento implements Serializable {
… //以下略
}


●プログラム2
public class Main {
public static void saveMemento(Memento memento) {
try {
ObjectOutput out = new ObjectOutputStream(new FileOutputStream("game.dat"));
out.writeObject(memento);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
… //以下略
}

public class Memento implements Serializable {
… //以下略
}


なお、私の環境は以下の通りです。
OS: Microsoft Windows XP Professional SP2
開発環境:Eclipse 3.2.2
java: java version "1.4.2_13"

こんにちは、片岡と言います。

プログラム1は、Java言語で学ぶデザインパターン入門(結城浩さん著)の
433ページを参考にして書きました。

私は、プログラム1のclose()の書き方よりもプログラム2のようなclose()の書き方が、
良いと思っています。
なぜならば、プログラム1では、out.writeObject(memento)行の例外によって、
close()が実行されないからです。

私のこの考え方は正しいのでしょうか。
もっと良いclose()の書き方はあるのでしょうか。
ご存知の方はいらっしゃいませんか。

●プロ...続きを読む

Aベストアンサー

>私のこの考え方は正しいのでしょうか。
正しいです。質問者さんが書かれているやり方が一般的です。
念のため書いておきますが、outをtryの外で宣言しないとコンパイルが通りません。

まぁ、あくまでデザインパターンを学ぶための本ですから、細かなコーディングについて気にする必要はないでしょう(疑問を持つことは良いことですが)。

Qjavaのapiをダウンロードしたいです。

Java EEをダウンロードするのではなくてJava SEをダウンロードして、必要に応じてapiをダウンロードしたいのですが、apiはどこからダウンロードすればよいのでしょうか?

javaxが含まれるのを使いたいです。

かなり調べたのですが、意外とどこにも回答がなく困っております。
初心者ですが、よろしくお願いします。

Aベストアンサー

eclipse なんかの初期設定だと、APIドキュメントはネット上のものが見れるようになっています。
API を zip でダウンロードしておきたいということなら、以下のページからダウンロードできます。(Java SE 7 を除く)
http://www.oracle.com/technetwork/jp/java/javase/documentation/api-jsp-316041-ja.html

---
Java SEのバージョン 1.3.0、1.4.0、5.0、6 の日本語ドキュメントは、こちらのページでアーカイブ・ファイルも提供しています。
---
このように書いてある部分のリンクをクリックしてください。

Q”main”NoClassDefFoundErrorについて

/*----------------------------------------
KeyEvent のサンプル
----------------------------------------*/
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class KeyEventSample{

JFrame frame = new JFrame("KeyEventは誰が取る?");
Canvas canvas = new Canvas();

public KeyEventSample(){
canvas.setSize(200,200);
frame.getContentPane().add(canvas,"Center");
frame.pack();
frame.setVisible(true);

KeyListener listener1 = new KeyDealer("frame");
frame.addKeyListener(listener1);

KeyListener listener2 = new KeyDealer("canvas");
canvas.addKeyListener(listener2);

}

public static void main(String[] args){
new KeyEventSample();
}
}

class KeyDealer extends KeyAdapter{

String name;

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

public void keyPressed(KeyEvent ke){
System.out.println(name + " got " + ke.getKeyCode());
}
}

上記のようなソースファイルをコンパイルし、javaコマンドで起動しようとすると
下記のようなエラーが出ます。いろいろサンプルプログラムを試してみたのですが、すべて同じメッセージです。何か根本的なところでミスがあると思うのですがわかりません。誰か教えていただけないでしょうか。ちなみにSDK1.3を使用しています。

Exception in thread "main" java.lang.NoClassDefFoundError:KeyEventSample/class

/*----------------------------------------
KeyEvent のサンプル
----------------------------------------*/
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class KeyEventSample{

JFrame frame = new JFrame("KeyEventは誰が取る?");
Canvas canvas = new Canvas();

public KeyEventSample(){
canvas.setSize(200,200);
frame.getContentPane().add(canvas,"Center");
frame.pack();
frame.setVisible(true);

Key...続きを読む

Aベストアンサー

私も同じようなコードを書いて実行してみているのですがこちらは上手くいきますね。

//Javaコード
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class KeyEventSample{

JFrame frame = new JFrame("KeyEventは誰が取る?");
Canvas canvas = new Canvas();

public KeyEventSample(){
canvas.setSize(200,200);
frame.getContentPane().add(canvas,"Center");
frame.pack();
frame.setVisible(true);

KeyListener listener1 = new KeyDealer("frame");
frame.addKeyListener(listener1);

KeyListener listener2 = new KeyDealer("canvas");
canvas.addKeyListener(listener2);

}

public static void main(String[] args){
System.out.println( 1 );
try{
new KeyEventSample();
}catch( Exception ee ){
ee.printStackTrace();
ee.toString();
}
}

class KeyDealer extends KeyAdapter{

String name;

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

public void keyPressed(KeyEvent ke){
System.out.println(name + " got " + ke.getKeyCode());
}
}
}
//↑↑ここまで↑↑

//DOSプロンプト
C:\ct27>javac KeyEventSample.java

C:\ct27>java KeyEventSample
//↑↑ここまで↑↑

私はJBuilder3.5を使用しつつなので上手く動いているのかもしれません。
ちょっとお手上げモードかもしれないです。ρ(。。)イジイジ

私も同じようなコードを書いて実行してみているのですがこちらは上手くいきますね。

//Javaコード
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class KeyEventSample{

JFrame frame = new JFrame("KeyEventは誰が取る?");
Canvas canvas = new Canvas();

public KeyEventSample(){
canvas.setSize(200,200);
frame.getContentPane().add(canvas,"Center");
frame.pack();
frame.setVisible(true);

K...続きを読む


人気Q&Aランキング

おすすめ情報