JAVA初心者のエラー原因と警告の原因は?

このQ&Aのポイント
  • JAVA初心者が気になるエラーの原因と警告の原因について解説します。
  • エラーが出るコードの原因や警告が出るコードの原因を解説します。
  • JAVA初心者がエラーと警告について理解するための解説をします。
回答を見る
  • ベストアンサー

簡単なこーどですが、エラーの原因が分かりません

今晩は、JAVAの初心者です、宜しくお願いします。 下のコードでエラーがでます、いくら考えても原因がさっぱり分かりません。 一体何処が悪いのでしょうか、宜しくお願いします。 また、最後の「j.show();」では警告が出ています。 何が原因でしょう?? ============================================================ import java.awt.Graphics; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.JFrame; class JFrame_Ohayou extends JFrame implements WindowListener{ /*********** コンストラクタ ********************/ public JFrame_Ohayou(){ setSize(400,300); setTitle("JFrameのテスト"); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } /******************* paint ***********************/ public void paint(Graphics g){ super.paint(g); g.drawString("おはよう",20,40); } } /******************* main ***********************/ public class JFrameTest{ public static void main(String[] args){ JFrame_Ohayou j = new JFrame_Ohayou(); j.show(); } } =============================================================

  • Java
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • komi1341
  • ベストアンサー率65% (25/38)
回答No.2

> WindowAdapterをaddWindowListener()に渡している場合には、WindowListenerの実装は不要になるのでしょうか。 書き方がいくつかあるのです。今回のコードを例に挙げます。 1つ目はJFrameTestクラスがWindowListenerを実装し、addWindowListener(this)という形でJFrameTestクラス自身をイベントリスナとして登録する方法。この場合はクラス名定義のところにimplements WindowListenerと書いてWindowListenerをこのクラスで実装することを宣言し、WindowListenerのabstractメソッドをこのクラス内ですべて実装します。 2つ目はWindowListenerを別のクラスで定義する方法。例えば class MyWindowListener implements WindowListener という宣言でクラスを作り、WindowListenerのメソッドをこのクラスで実装し、JFrameTestクラスでは MyWindowListener listener = new MyWindowListener(); addWindowListener(listener); のようにしてイベントリスナを指定します。この方法だとMyWindowListenerクラスは他のプログラムでも使える、といった利点があります。 3つ目はアダプタクラスを使う方法。 class MyWindowAdapter extends WindowAdapter というクラスを作り、「使いたいメソッドだけ」実装して、MyWindowAdapterクラスのオブジェクトをイベントリスナとして登録します。アダプタクラスは、対応するリスナインターフェースの使わないabstractメソッドを実装する手間を省いてくれるものです。 4つ目は、アダプタクラスを使いたいのだけれどもわざわざクラスを分けて書きたくないときの簡易的な書き方。それがaddWindowListener(new WindowAdapter() { … という書き方です。ここでのnew WindowAdapter(){}のような書き方は、固有の名前を持たないクラスの定義なので無名インナクラスと呼ばれます。 他にもやり方があるかもしれませんが、要は複数の書き方ができる中でどれか1つを使えばいい、ということです。1つのクラスに対して上記の中から複数のやり方を採用したときの動作がどうなるかは分かりません(優先順位があるかもしれないし、動作不定になるかもしれません)が、1つのやり方で書けば充分なのです。 このあたりは参考書によりますが、普通はWindowListenerを実装する書き方を先に解説し、別の方法として無名インナクラスを使う方法が紹介されていると思うのですが。 > #APIのサイトに行きました。 > しかし、下のような内容で同じ見出しで6種類の内容があり、また、「推奨されていません」とは書かれてはいますが、どう書けというコメントも見当たらないのですですが、、、、、 > このコマンドは変更したので、どのように書けと簡単に書いてくれてれば分かり易いのにと考えてしまい、ついつい掲示板に質問してしまいます。 前回紹介したリンクを見てみましたか? 下記のページに繋がっているはずです。 http://java.sun.com./javase/ja/6/docs/ja/api/java/awt/Window.html#show() ここに「推奨されていません。 JDK version 1.5 以降は、setVisible(boolean) に置き換えられました。」とはっきり書かれていますよね。 つまりshow()をsetVisible()に置き換えればいいんです。setVisible()は引数にbooleanを取りますが、その意味はさらにsetVisible()を調べれば分かるはずです。ちなみにこの場合はshow()の代わりにsetVisible(true)に書き換えれば警告は出なくなります。 どうもお返事を見るとshow()というメソッド名で検索したようですが、それでは関係のないクラスのshow()まで出てきてしまうので混乱してしまうでしょう。自分が使っているクラスから順にたどっていく方が正解にたどりつきやすいですよ。

eiji_0035
質問者

お礼

komi1341さん、色々とご教示ありがとうございました。 今後とも宜しくお願いします。

その他の回答 (1)

  • komi1341
  • ベストアンサー率65% (25/38)
回答No.1

まず質問の仕方を勉強してください。 http://www.hyuki.com/writing/techask.html 「エラーが出ます」ではなく、エラー文そのものを載せてください。 私のところでは下記のエラーが出ましたが、 > JFrameTest.java:8: JFrame_Ohayou は abstract でなく、java.awt.event.WindowListener 内の abstract メソッド windowDeactivated(java.awt.event.WindowEvent) をオーバーライドしません。 > class JFrame_Ohayou extends JFrame implements WindowListener{ インターフェースを実装するときは、abstract宣言されているメソッドをすべて実装しなければいけない、というのはご存知ですか? このプログラムはWindowListenerを実装しているのですが、WindowListenerのabstractメソッドの1つであるwindowDeactivated()が実装されていないためにこのエラーが出ているのです。このあたりはインターフェースについて参考書で調べれば載っていると思います。またどのインターフェースにどんなabstractメソッドがあるかはAPIリファレンスで確認できます。 http://java.sun.com./javase/ja/6/docs/ja/api/index.html ちなみにこのプログラムの場合、WindowAdapterをaddWindowListener()に渡しているので、WindowListenerの実装自体不要です。つまりimplements WindowListenerの部分は削除してしまっていいということです。アダプタクラスについては参考書のイベント処理関連の章に載っていると思います。 > また、最後の「j.show();」では警告が出ています。 これもAPIリファレンスで確認できますが http://java.sun.com./javase/ja/6/docs/ja/api/javax/swing/JFrame.html ここの「クラス java.awt.Window から継承されたメソッド」の中にshow()があり、そのリンク先にJDK1.5から推奨されなくなったと書いてあります。代わりにどう書けばいいかもAPIリファレンスを読めば書かれています。 またわざわざこのような場で質問しなくても、エラーメッセージで検索すれば解決策が見つかることが多いです。APIリファレンスを読むこととエラーで検索すること、は自分で勉強するために癖をつけることをお勧めします。

eiji_0035
質問者

お礼

回答有り難う御座います。 APIリファレンスがあるのは知ってはいるのですが、開き直っている訳ではないのですが、初心者にとってはチンプンカンプンです。 仕方なく参考書を調べながらになってしまいます。 >ここの「クラス java.awt.Window から継承されたメソッド」 #APIのサイトに行きました。 しかし、下のような内容で同じ見出しで6種類の内容があり、また、「推奨されていません」とは書かれてはいますが、どう書けというコメントも見当たらないのですですが、、、、、 このコマンドは変更したので、どのように書けと簡単に書いてくれてれば分かり易いのにと考えてしまい、ついつい掲示板に質問してしまいます。 ================================================== show() - class java.awt.Component のメソッド 推奨されていません。 JDK バージョン 1.1 以降は、setVisible(boolean) に置き換えられました。 show() - class java.awt.Window のメソッド Window を表示します。 show() - class java.awt.Dialog のメソッド Dialog を表示します。 show() - class javax.swing.JInternalFrame のメソッド この内部フレームを表示し、前面に移動します。 show() - class javax.swing.plaf.basic.BasicComboPopup のメソッド ComboPopup.show() の実装です。 show() - interface javax.swing.plaf.basic.ComboPopup のメソッド ポップアップを表示します。 =======================================================

eiji_0035
質問者

補足

komi1341さん、回答有り難うございます。 >ちなみにこのプログラムの場合、WindowAdapterをaddWindowListener()に渡しているので、WindowListenerの実装自体不要です。つまりimplements WindowListenerの部分は削除してしまっていいということです。アダプタクラスについては参考書のイベント処理関連の章に載っていると思います。 # WindowAdapterをaddWindowListener()に渡している場合には、WindowListenerの実装は不要になるのでしょうか。 実は色々と参考書等を調べたのですが、「インターフェースを実装するときは、abstract宣言されているメソッドをすべて実装しなければいけない」との解説はありますが、「WindowAdapterをaddWindowListener()に渡している場合には、WindowListenerの実装は不要」との解説は見当たらないのですが。 宜しくお願いします。

関連するQ&A

  • 実行してもタイトルバーしか表示されません

     JAVAの初心者です。  "Public JFramelTest(){"の箇所で"メソッドの戻りの型がありません"とエラーがでます。  しかし実行はできるので、実行するとダイヤログは表示されますが、タイトルバーのみしか、表示されません。  サイズを大きくすると文字はかけていますが、タイトルバーには"JFrame Test"の文字は有りません。  一体どこが悪いのでしょうか宜しくお願いします。 ============================================================================= //JFrameTest:Swingのフレーム import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JFrameTest extends JFrame{ /* コンストラクタ */ public JFramelTest(){ setSize(800,400); //画面サイズ setTitle("JFrame Test"); //タイトル //×ボタンで終了 addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } //paint public void paint(Graphics g){ super.paint(g); //JFrameクラスのpaintの呼出し g.drawString("JAVA",80,100); } //main public static void main(String[] args) { JFrame w = new JFrameTest(); w.show(); } }

    • ベストアンサー
    • Java
  • フレームを表示できないのですが・・・

    こんにちは。ジャバ初心者です。下記のプログラムを javac Sample120.java と入力してコンパイルはできたのですが java Sample120 と入力すると Exception in thread "main" java.lang.NoClassDefFoundError: Sample120 というメッセージが出て実行できないのですがどのようにすればいいですか? import java.awt.*; import java.awt.event.*; class Sample120 extends Frame { public static void main(String args[]) { Sample120 app = new Sample120(); } public Sample120() { setSize(250,100); setVisible(true); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public void paint(Graphics g) { g.drawString("Hello Java AWT!",10,60); } }

    • ベストアンサー
    • Java
  • これを正確に実行したいのですが

    再びすみません。 下のプログラムなのですが。コンパイルはできるのに 図が表示されず、終わらず、実行がおかしなことになってしまいます。どこを直したらいいのでしょうか? お願い致します。 import java.awt import java.awt.event.*; class gazou extends Frame { public gazou(){ setSize(300,200); addWindowListener(new WindowAdapter( ) public void windowClosing(WindowEvent e) System.exit(0); } }); } public void paint(Graphics g) g.drawRect(40,40,50,50); g.drawRoundRect(100,40,50,50,10,10); g.drawOval(160,40,50,50); g.drawArc(220,40,50,50,45,270); g.fillRect(40,100,50,50); g.fillRoundRect(100,100,50,50,10,10); g.fillOval(160,100,50,50); g.fillArc(220,100,50,50,45,270); g.drawLine(40,180,260,180); } } public class kadai19{ public static void main(String[] args) { Frame w = new Frame(); w.show( ); } }

    • ベストアンサー
    • Java
  • paintメソッドでエラー

    以下はSwingのフレーム上に画像を表示させようとして書いたものの全文です。実行するとSyntax errorがでますが、これはどうしてでしょうか。 なおべつのプログラムでmainメソッドとpaintメソッドを同じクラスに書いたらうまく表示できました。 アドバイスお願いします。 import java.awt.Graphics; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import javax.swing.JFrame; public class MyImage3 {  public static void main(String[] args) {   MyFrame7 frame1=new MyFrame7();   frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   frame1.pack();   frame1.setBounds(100,100,400,320);   frame1.setVisible(true);  } } class MyFrame7 extends JFrame{  public MyFrame7(){   public void paint(Graphics g){   //この行でSyntax error発生    BufferedImage bImage1=null;    try {     bImage1=ImageIO.read(getClass().getResource("k_1pin.gif"));    } catch (Exception e) {     e.printStackTrace();    }    g.drawImage(bImage1,40,40,this);   }  } }

    • ベストアンサー
    • Java
  • javaの画像の表示のプログラムとmouselistenerのプログラ

    javaの画像の表示のプログラムとmouselistenerのプログラム(それぞれ↓にあります)をひとつに合わせたいのですがどうすればいいでしょうか? import java.awt.event.*; import javax.swing.*; class MyPanel extends JPanel implements MouseListener{ public MyPanel() { addMouseListener(this); } public void mouseClicked(MouseEvent e) { int x=e.getX(); int y=e.getY(); System.out.println("マウスがクリックされました (" + e.getX() + ", " + e.getY() + ")"); if((x<100&&x>40)&&(y<100&&y>40)){ System.out.println("範囲内"); }else{ System.out.println("aaa"); } } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } } public class MouseEventExample extends JFrame { public static void main(String[] args) { new MouseEventExample(); } MouseEventExample() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().add(new MyPanel()); setSize(300, 200); setVisible(true); } } ======↑のプログラムと↓のプログラムを合わせたいのです package novel; import java.awt.*; import java.awt.geom.*; import java.awt.event.*; import javax.swing.*; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import java.io.IOException; public class Java2dTest extends JFrame{ public static void main(String[] args){ Java2dTest test = new Java2dTest(); test.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){System.exit(0);} }); test.setBounds( 0, 0, 200, 200); test.setVisible(true); } public void paint(Graphics g){ Graphics2D g2 = (Graphics2D)g; BufferedImage readImage = null; try { readImage = ImageIO.read(new File("sample.png")); } catch (Exception e) { e.printStackTrace(); readImage = null; } if (readImage != null){ g2.drawImage(readImage, 0, 0, this); } } }

  • JPanelで宣言したメソッドについて

    JPanelを継承したクラスで、引数をもらってその引数を表示するメソッドを作成します。そして別のJFrameを継承したクラスの中で、さきほど作成したメソッドを利用したいのですが、どうすればできるのでしょうか?そもそもこのやり方できちんと表示されるのでしょうか? ぜひともご教授のほど宜しくお願いします。 以下はプログラムになります。 import java.awt.*; import java.awt.event.*; import javax.swing.*; class Ptest extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); g.drawString("よろしく", 50, 50); } public void draw(String s) { Graphics g = getGraphics(); g.drawString(s, 100, 100); } } class Ftest extends JFrame { JLabel jlb; public Ftest() { setSize(350, 300); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); Container c = getContentPane(); Ptest p = new Ptest(); p.draw("yoroshiku"); c.add(p); p.setLayout(null); jlb = new JLabel("frame"); p.add(jlb); jlb.setBounds(70, 70, 50, 50); } } public class Test1 { public static void main(String[] args) { JFrame w = new Ftest(); w.show(); } }

    • ベストアンサー
    • Java
  • getDocumentBase() でエラーがでます

    getDocumentBase() でエラーがでます 下のように書いているのですが getDocumentBase() でエラーがでて困っています 他のところは動いてて それに追加しました 何が原因なのでしょうか? import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class window { public static void main( String[] args ) { AppFrame f = new AppFrame(); image i = new image(); i.init(); f.setSize( 200, 200 ); f.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e) { System.exit(0); } } ); // f.show(); f.setVisible( true ); } } class image extends Applet { Image image; image() { } public void init() { image = getImage( getDocumentBase(), "image.jpg" ); } ...

  • Javaのエラーなのですが

    import java.awt.*; import java.awt.event.*; class PrefFrame extends Frame { public PrefFrame(String title) { //フレームのタイトル setTitle(title); //ウィンドウを閉じる時 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } } public class PrefTest { public static void main(String args[]) { PrefFrame frm = new PrefFrame("都道府県マスター"); frm.setLocation(300, 200); frm.setSize(250, 350); frm.setBackground(Color.LIGHT_GRAY); frm.setVisible(true); } } と入力しました。コンパイルは出来て、CLASSファイルは作成できたのですが、実行できずにエラーException in thread "main" java.lang.NoClassDefFoundError: PrefTest/javaとなってしまいます。実行するためにはどうしたらよいのでしょうか?

  • java初心者です

    空のウィンドウを作ってみたものの ウィンドウが閉じれません。ファイル名はMyApp3.javaです。クラスファイルは3つちゃんとできてます import java.awt.*; import java.awt.event.*; class MyFrame extends Frame { public MyFrame(){ addWindowListener(new MyWindowAdapter()); } class MyWindowAdapter extends WindowAdapter { public void WindowClosing(WindowEvent e){ System.exit(0); } } } public class MyApp3 { public static void main(String[] args){ MyFrame f =new MyFrame(); f.setSize(300,200); f.setVisible(true); } }

    • ベストアンサー
    • Java
  • createImage()を使いコンパイル

    このプログラムをcreateImage()を使ってイメージを作りたいのですが自分で変更してもコンパイルできません><;どのように変更したらイメージをつくることができるのでしょうか?回答よろしくおねがいしまあす(^^; import java.awt.Color; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import javax.swing.JComponent; import javax.swing.JFrame; class Test extends JComponent implements MouseMotionListener { public static void main(String[] args) { JFrame frame = new JFrame(); frame.getContentPane().add(new Test()); frame.setBounds(0 , 0 , 400 , 300); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT ON CLOSE); } Image image; public Test() { addMouseMotionListener(this); image = new BufferedImage(400, 300, BufferedImage.TYPE INT RGB); Graphics g = image.getGraphics(); g.setColor(new Color(0xFF, 0xFF, 0xFF)); g.fillRect(0, 0, 400, 300); }public void paintComponent(Graphics g) { g.drawImage(image, 0, 0, this); } public void mouseDragged(MouseEvent e) { Graphics g = image.getGraphics(); g.setColor(new Color(0, 0, 0)); g.fillOval(e.getX() - 5, e.getY() - 5, 5 , 5); repaint(); }public void mouseMoved(MouseEvent e) {} }

専門家に質問してみよう