プロが教えるわが家の防犯対策術!

/*----------------------------------------
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

A 回答 (3件)

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



//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を使用しつつなので上手く動いているのかもしれません。
ちょっとお手上げモードかもしれないです。ρ(。。)イジイジ
    • good
    • 0
この回答へのお礼

いろいろありがとうございました。試していただいた手順を参考にしていると、私の間違いがわかりました。いろいろ複雑な情報を与えてしまい申し訳ありませんでした。原因はjava実行時に拡張子のclassをつけて実行していました。

お礼日時:2001/01/09 15:47

>はい。

クラス名とファイル名は同じにしています。

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

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

この回答への補足

はい。CLASSファイルの存在するディレクトリで行っています。少し、気になっている点としては、関係ないかもしれませんがFRAMEの定義のないプログラムだと動作します。SDK1.2から1.3になったときに、何か定義の仕方が変わったとか、そのようなことは関係ないでしょうか?あくまで推測です。

補足日時:2001/01/08 20:55
    • good
    • 0

ファイル名とクラス名が違うとエラーがおきますが、同じにしていますか?


上記でいうとクラス名がKeyEventSampleなのでファイル名もおよびKeyEventSample.class
にしなければ動きません。それもでだめなようでしたら補足をいただけると嬉しいです。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=24875

この回答への補足

はい。クラス名とファイル名は同じにしています。

補足日時:2001/01/08 18:40
    • good
    • 0

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