-PR-
解決済み

”main”NoClassDefFoundErrorについて

  • 困ってます
  • 質問No.25682
  • 閲覧数120
  • ありがとう数4
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 44% (35/79)

/*----------------------------------------
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
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル9

ベストアンサー率 62% (48/77)

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

//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を使用しつつなので上手く動いているのかもしれません。
ちょっとお手上げモードかもしれないです。ρ(。。)イジイジ
お礼コメント
cyan1110

お礼率 44% (35/79)

いろいろありがとうございました。試していただいた手順を参考にしていると、私の間違いがわかりました。いろいろ複雑な情報を与えてしまい申し訳ありませんでした。原因はjava実行時に拡張子のclassをつけて実行していました。
投稿日時 - 2001-01-09 15:47:20
関連するQ&A
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル9

ベストアンサー率 62% (48/77)

ファイル名とクラス名が違うとエラーがおきますが、同じにしていますか? 上記でいうとクラス名がKeyEventSampleなのでファイル名もおよびKeyEventSample.class にしなければ動きません。それもでだめなようでしたら補足をいただけると嬉しいです。 ...続きを読む
ファイル名とクラス名が違うとエラーがおきますが、同じにしていますか?
上記でいうとクラス名がKeyEventSampleなのでファイル名もおよびKeyEventSample.class
にしなければ動きません。それもでだめなようでしたら補足をいただけると嬉しいです。
補足コメント
cyan1110

お礼率 44% (35/79)

はい。クラス名とファイル名は同じにしています。
投稿日時 - 2001-01-08 18:40:55


  • 回答No.2
レベル9

ベストアンサー率 62% (48/77)

>はい。クラス名とファイル名は同じにしています。 これは大変失礼いたしました。<(_ _)> javaコマンドで実行させるときにちゃんと.classファイルがいるディレクトリで行っていますか? 適当なディレクトリや、間違ったディレクトリでjavaコマンドを実行させるとNoClassDefFoundError と言われるようです。 ちなみにNoClassDefFoundErrorとは 「 ...続きを読む
>はい。クラス名とファイル名は同じにしています。

これは大変失礼いたしました。<(_ _)>

javaコマンドで実行させるときにちゃんと.classファイルがいるディレクトリで行っていますか?
適当なディレクトリや、間違ったディレクトリでjavaコマンドを実行させるとNoClassDefFoundError
と言われるようです。
ちなみにNoClassDefFoundErrorとは
「通常のメソッド呼び出し、あるいは new 式を使った新しいインスタンスの生成で Java Virtual Machine
またはクラスローダがクラス定義をロードしようとしたとき、クラス定義が見からない場合にスローされます。」
「検索されるクラス定義は、現在実行中のクラスをコンパイルする時点では存在していましたが、
その後見つからなくなっています。」
 といった意味のようです。
補足コメント
cyan1110

お礼率 44% (35/79)

はい。CLASSファイルの存在するディレクトリで行っています。少し、気になっている点としては、関係ないかもしれませんがFRAMEの定義のないプログラムだと動作します。SDK1.2から1.3になったときに、何か定義の仕方が変わったとか、そのようなことは関係ないでしょうか?あくまで推測です。
投稿日時 - 2001-01-08 20:55:14
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ