main NoClassDefFoundErrorについて

このQ&Aのポイント
  • main NoClassDefFoundErrorについての対処方法について解説します。
  • ソースファイルをコンパイルし、javaコマンドで起動する際に発生するmain NoClassDefFoundErrorのエラーについて詳しく説明します。
  • SDK1.3を使用している場合に起こりやすいmain NoClassDefFoundErrorについて、解決策を紹介します。
回答を見る
  • ベストアンサー

”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

  • Java
  • 回答数3
  • ありがとう数5

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

  • ベストアンサー
  • ct27
  • ベストアンサー率62% (48/77)
回答No.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を使用しつつなので上手く動いているのかもしれません。 ちょっとお手上げモードかもしれないです。ρ(。。)イジイジ

cyan1110
質問者

お礼

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

その他の回答 (2)

  • ct27
  • ベストアンサー率62% (48/77)
回答No.2

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

cyan1110
質問者

補足

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

  • ct27
  • ベストアンサー率62% (48/77)
回答No.1

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

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

補足

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

関連するQ&A

  • TABキーの検出

    Swingコンポーネントで、TABキーのイベントを取得する 方法を教えてください。 タブキー以外は検出できるのですが… import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JPanel; public class TabKeyListener { public TabKeyListener() { JPanel panel = new JPanel(); panel.addKeyListener( new KeyListener(){ public void keyPressed(KeyEvent e) { System.out.println(e.getKeyCode()); } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } } ); JFrame frame = new JFrame(); frame.add(panel); frame.setBounds(100,100,200,200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); panel.requestFocusInWindow(); } public static void main(String[] args) { new TabKeyListener(); } }

    • ベストアンサー
    • Java
  • Java バックグラウンドでキーを監視したい

    Swingを使用しています。ウィンドウにフォーカスが外れても、どのキーが押されたか判定できる方法を教えて下さい。 フォーカスがあっていれば、動作するプログラムは作れました。 import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; public class KeyListenerOnBackgroundTest extends JFrame implements KeyListener{ public KeyListenerOnBackgroundTest() { setSize(300, 200); setDefaultCloseOperation(EXIT_ON_CLOSE); addKeyListener(this); } public static void main(String[] args){ new KeyListenerOnBackgroundTest().setVisible(true); } @Override public void keyPressed(KeyEvent e) { // 文字とコードを表示する System.out.println(e.getKeyCode()+":"+e.getKeyChar()); } @Override public void keyReleased(KeyEvent e) {} @Override public void keyTyped(KeyEvent e) { } }

    • ベストアンサー
    • Java
  • 多角形を動かす範囲を設定したいのですが…。

    多角形をKeyListenerで動かす範囲を設定 したいのですがどうすればいいでしょうか。 import java.awt.Color; import java.awt.Graphics; import java.awt.Polygon; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JPanel; public class JavaGame2 { public static void main(String age[]) { JFrame frame = new JFrame(); frame.setTitle("テスト"); frame.setSize(400, 400); frame.setLocation(1000, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); MyPanel panel = new MyPanel(); frame.add(panel); frame.setVisible(true); } } class MyPanel extends JPanel implements KeyListener{ private Ziki ziki; public MyPanel() { setBackground(Color.black); ziki = new Ziki(); addKeyListener(this); setFocusable(true); } protected void paintComponent(Graphics g) { super.paintComponent(g); ziki.draw(g); } public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); switch(key) { case KeyEvent.VK_UP : ziki.moveUpZiki(); break; case KeyEvent.VK_RIGHT :ziki.moveRightZiki(); break; case KeyEvent.VK_DOWN : ziki.moveDownZiki(); break; case KeyEvent.VK_LEFT : ziki.moveLeftZiki(); break; }repaint(); } public void keyReleased(KeyEvent e){} public void keyTyped(KeyEvent e){} } class Ziki { private Polygon p; public Ziki() { int[] xpoints = {240,260,250}; int[] ypoints = {260,260,240}; p = new Polygon(xpoints,ypoints,xpoints.length); } void draw(Graphics g) { g.fillPolygon(p); } public void moveLeftZiki() { for (int i=0; i < p.xpoints.length; i++ ) { p.xpoints[i] -= 5; } } public void moveRightZiki() { for (int i=0; i < p.xpoints.length; i++ ) { p.xpoints[i] +=5; } } public void moveUpZiki() { for (int i=0; i < p.ypoints.length; i++ ) { p.ypoints[i] -= 5; } } public void moveDownZiki() { for (int i=0; i < p.ypoints.length; i++ ) { p.ypoints[i] += 5; } } }

    • ベストアンサー
    • Java
  • 画面遷移について困ってます。

    TITLE →(Enterクリック)→ GAME というふうにしたいのですが…できません><どこがダメなんでしょうか。 import java.awt.Color; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JPanel; public class JavaGame3 { public static void main(String age[]) { JFrame frame = new JFrame(); frame.setTitle("ゲームフレーム"); frame.setSize(500, 550); frame.setLocation(1000, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); Testpanel panel = new Testpanel(); frame.add(panel); } } class Testpanel extends JPanel implements KeyListener { static final int TITLE = 0; // タイトルモード static final int GAME = 1; // ゲームモード int mode; public Testpanel() { setBackground(Color.black); addKeyListener(this); mode = TITLE; // 最初はタイトル画面 } private void drawTitle(Graphics g) { g.setColor(Color.blue); g.drawString("test1", 165, 150); g.setColor(Color.white); g.drawString("Hit Enter Key!", 150, 350); } private void drawGameOver(Graphics g) { g.setColor(Color.white); g.fillRect(5,120,240,30); g.setColor(Color.red); g.drawString("test2", 85, 140); } public void paintComponent(Graphics g) { super.paintComponent(g); if(mode == TITLE) { drawTitle(g); } else if(mode == GAME) { drawGameOver(g); } } public void keyPressed(KeyEvent e){ int key = e.getKeyCode(); if(mode == TITLE) { switch(key) { case KeyEvent.VK_ENTER: mode = GAME; break; } }repaint(); } public void keyReleased(KeyEvent e){} public void keyTyped(KeyEvent e){} }

    • ベストアンサー
    • Java
  • 「継承されたメソッドの可視性を下げることは出来ません。」というエラーの

    「継承されたメソッドの可視性を下げることは出来ません。」というエラーの意味がわかりません。  JAVA初心者です、宜しくお願いします。  下のようなコードを書きましたが、"void paint(Graphics g)"の箇所で 「Canvasから継承されたメソッドの可視性を下げることは出来ません。」 とのエラーメッセジが出ました。  "public void paint(Graphics g)"とかくと、エラーは消えました。  何故"public"をつける必要があるのでしょうか。  また、クラス自身には、publicをつけない場合には、publicと見なされると本で読みましたが  メッソドにはこのようなルールはないのでしょうか。 ======================================= public class Canvas_test extends Canvas { public static void main(String[] args) { JFrame frame = new JFrame(); frame.setTitle("Canvas_test"); frame.setBounds(0,0,480,380); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setResizable(false); frame.setLayout(null); JPanel cp = new JPanel(); cp.setLayout(null); frame.add(cp); cp.setBounds(38,20,400,300); Canvas canvas = new Canvas_test(); cp.add(canvas); canvas.setBounds(0,0,400,300); frame.setVisible(true); } void paint(Graphics g) { g.drawString("aaaa",40,40); } } ========================================

    • ベストアンサー
    • Java
  • javaのmainの中のループに割込を掛ける

    毎度、お世話になります。 javaのmainの中のループに割込を掛ける方法をお教えください。 添付コードの『Thread.currentThread().interrup()』は、旨く機能しません。 以上、宜しくお願いします。 =========== import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class T_try_loop extends JFrame{ JFrame frame=new JFrame(); T_try_loop(){ System.out.println("aaaa"); JPanel p1=new JPanel(); JButton button1=new JButton("button1"); button1.addActionListener(new TimButton1()); p1.add(button1); getContentPane().add(p1, BorderLayout.CENTER); } public static void main(String args[]){ T_try_loop frame=new T_try_loop(); frame.setTitle("TTTT"); frame.setBounds(10,10,400,300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); for(int j = 0;j < 80; j++){ try{ Thread.sleep(80); System.out.print("*"); } catch(InterruptedException e){ System.out.println(": main_loopに、今割り込まれました"); } } }//public static void main public class TimButton1 implements ActionListener{ @Override public void actionPerformed(ActionEvent ae){ String cmd =ae.getActionCommand(); if(cmd.equals("button1")){ Thread.currentThread().interrupt(); System.out.println("Button clicked"); } } }//public class TimButton1 }

    • ベストアンサー
    • Java
  • スクロールバー

    Javaを始めたばかりの者です。 すごく基本的な質問をさせて頂きます。 恥ずかしいのですが、スクロールバーを付けようとしても付けることができませんでした。 以下がそのプログラムですが、どうすればよいか正直わかりません。よければ教えて下さい。 import java.awt.*; import javax.swing.*; public class ScrolTest { public JPanel panel =new JPanel(); public static void main (String[] argv) { JFrame frame =new JFrame("てすとー"); frame.setSize(50000,6000); Scrollbar scrollbar = new Scrollbar(); frame.add(scrollbar, null); scrollbar.setBounds(new Rectangle(220, 15, 15, 180)); frame.show(); } }

  • 実行できません。

    import javax.swing.*; public class JFrame01 { public static void main(String[] args) { JFrame frame = new JFrame("JFrame01"); frame.setSize(400, 300); frame.setVisible(true); } }  このプログラムはどこかおかしいでしょうか。コンパイルはできるんですけど、実行することができません。  実行すると、 「Exception in thread "main" java.lang.NoClassDefFoundError: JFrame01」 というエラーが出ます。

    • ベストアンサー
    • Java
  • JavaSwingのファンクションキーのイベント

    JavaのSwingでファンクションキーのイベントをひろいたいの ですが、F10キーやF12キーで思うようにイベントをひろえま せん。 たとえば下のように書いて、フレームにフォーカスがあるときボ タンを押すとカウントが増えていくものを作ったとき、アルファベ ットやほかのFキーならスムーズにカウントされていくのにF10は 2回に1回しかカウントされず、F12だと途中で反応したりしなか ったりします。 この原因と対処法を知っているひとがいたら教えてください。 よろしくお願いします。 public class WindowTest extends JFrame implements KeyListener{ public static int intKeyPress =0; JLabel lbl = new JLabel("0"); public static void main(String[] args) { WindowTest w = new WindowTest(); } public WindowTest() { addKeyListener(this); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(320, 160); this.add(lbl); this.setLocationRelativeTo(null); this.setVisible(true); } @Override public void keyPressed(KeyEvent e) { lbl.setText(String.valueOf(intKeyPress++)); } @Override public void keyReleased(KeyEvent e) {} @Override public void keyTyped(KeyEvent e) {} }

    • ベストアンサー
    • Java
  • アプレットが開始しないエラーについて

    今Javaで「1」のキーを押すと、現在表示されている画像が変わるアプレットを作っています。 書いたプログラムは以下です。 import java.applet.*; import java.awt.*; import java.awt.event.*; import java.lang.String; class Gazou extends Applet { private Image pic[] = new Image[3]; private int stat,stat2; private char pushkey; public Gazou(String name1, String name2, String name3, char c1) { this.stat=0; this.pic[0] = getImage(getDocumentBase(),name1); this.pic[1] = getImage(getDocumentBase(),name2); this.pic[2] = getImage(getDocumentBase(),name3); this.pushkey = c1; } public Image GetPicture(char n) { if(pushkey == n) { if(this.stat == 0) this.stat = 1; this.stat2=0; if(this.stat == 1) this.stat = 2; this.stat2=1; if(this.stat == 2) this.stat = -1; this.stat2=2; } return this.pic[this.stat2]; } } public class ImageView extends Applet implements KeyListener { char flg; Gazou data = new Gazou("1-1.JPG","1-2.JPG","a.JPG",'1'); public void init() { addKeyListener(this); } public void paint(Graphics g) { if(flg == '1') g.drawImage(data.GetPicture(flg),0,0,this); } public void keyPressed(KeyEvent e) { flg = e.getKeyChar(); repaint(); } public void keyReleased(KeyEvent e){} public void keyTyped(KeyEvent e){} } 1-1.JPG,1-2.JPG,a.JPGはソースファイルと同じディレクトリに保存してあります。 NullPointerExceptionが出てるので代入ミスなのかと思っているのですが、どこを直したらよいかわかりません。 どなたか分かる方ご教授おねがいします。 エラーメッセージは別に示します。

    • ベストアンサー
    • Java

専門家に質問してみよう