質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

1147閲覧

javaでコマンドプロンプトに大量のエラー文

Ritsu

総合スコア15

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/06/29 15:57

希望通りの動作はしてくれるんですが、

「終了ボタンの表示」 と 「終了ボタンの非表示」

ボタンを押すとコマンドプロンプトに大量のエラー文が出てきて困っています。
ご指導よろしくお願いいたします。

java

1import java.awt.*; 2import java.awt.event.*; 3import javax.swing.*; 4 5class MyGlassPane extends MyMenuFrame02 implements ActionListener{ 6 7 private JLabel label1; 8 private JButton dispButton; 9 private JButton exitButton; 10 11 private JPanel gPane; 12 13 private JPopupMenu popupMenu = new JPopupMenu( "ポップアップメニュー" ); 14 private JMenuItem popCopyItem = new JMenuItem( "コピー" ); 15 private JMenuItem popPrintItem = new JMenuItem( "印刷" ); 16 private JMenuItem popExitItem = new JMenuItem( "<html><font color=red>終了" ); 17 18 MyGlassPane(String title){ 19 super(title); 20 21 label1 = new JLabel( new ImageIcon( "BAnetwork.jpg" ) ); 22 add( label1, BorderLayout.CENTER ); // イメージを中央に貼り付ける 23 24 dispButton = new JButton( "終了ボタンの表示" ); // 「表示」ボタン 25 dispButton.addActionListener( this ); // リスナーの登録 26 add( dispButton, BorderLayout.SOUTH ); // フレームの下部に貼り付ける 27 28 exitButton = new JButton( "終了" ); // 「終了」ボタン 29 exitButton.addActionListener( this ); // リスナーの登録 30 31 gPane = (JPanel)this.getGlassPane(); // グラスペインを取り出す 32 add( gPane, BorderLayout.NORTH ); 33 gPane.add( exitButton ); // 「終了」ボタンをグラスペインに貼り付ける 34 35 pack(); 36 37 popupMenu.add( popCopyItem ); 38 popupMenu.add( popPrintItem ); 39 popupMenu.addSeparator(); 40 popupMenu.add( popExitItem ); 41 42 popCopyItem.addActionListener( this ); 43 popPrintItem.addActionListener( this ); 44 popExitItem.addActionListener( this ); 45 46 addMouseListener( new PopupMenuListener() ); 47 } 48 49 public void actionPerformed( ActionEvent e ){ 50 JButton jbtn; 51 String name = e.getActionCommand(); // ボタンのテキストを取得する 52 53 if( name.equals( "終了ボタンの表示" ) ){ // 「表示」ボタンが押されたら 54 jbtn = (JButton)e.getSource(); // イベントからJButtonのオブジェクトを取得 55 jbtn.setText( "終了ボタンの非表示" ); // そのボタンのテキストを「非表示」にする 56 gPane.setVisible( true ); // グラスペインを可視にする 57 }else if( name.equals( "終了ボタンの非表示" ) ){ // 「非表示」ボタンが押されたら 58 jbtn = (JButton)e.getSource(); // イベントからJButtonのオブジェクトを取得 59 jbtn.setText( "終了ボタンの表示" ); // そのボタンのテキストを「表示」にする 60 gPane.setVisible( false ); // グラスペインを非可視にする 61 }else if( name.equals( "終了" ) ) // 「終了」ボタンが押されたら 62 System.exit( 0 ); 63 64 JMenuItem selectedItem = (JMenuItem)e.getSource(); 65 if( selectedItem == popCopyItem ) 66 System.out.println( "ポップアップの「コピー」アイテムが押された" ); 67 else if( selectedItem == popPrintItem ) 68 System.out.println( "ポップアップの「印刷」アイテムが押された" ); 69 else if( selectedItem == popExitItem ){ 70 System.out.println( "ポップアップの「終了」アイテムが押された" ); 71 System.exit( 0 ); 72 } 73 else 74 super.actionPerformed( e ); // スーパークラスのハンドラに処理を任せる 75 76 77 } 78 79 class PopupMenuListener extends MouseAdapter { 80 81 public void mousePressed( MouseEvent e ){ 82 if( e.isPopupTrigger() ) 83 popupMenu.show( e.getComponent(), e.getX(), e.getY() ); 84 } 85 public void mouseReleased( MouseEvent e ){ 86 if( e.isPopupTrigger() ) 87 popupMenu.show( e.getComponent(), e.getX(), e.getY() ); 88 } 89 } 90 91 public static void main( String [] args ) 92 { 93 MyGlassPane f = new MyGlassPane("MyGlassPane"); 94 f.setVisible( true ); 95 } 96} 97 98

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/06/30 01:27

例外スタックトレースつぶれて見えないな。 例外のスタックトレースって基本「atの行」は呼び出し階層だから、 コードを持っている人以外には無意味なものになるのです。 なんで画像で全体をあげるのもいいけど縮小してはいけない。 テキストで at の行以外を上げる 必要があります。
Ritsu

2019/06/30 05:13

コメントありがとうございます。 そうなんですね、ご指摘ありがとうございます! 次回から at 文以外をテキストであげようと思います。
guest

回答2

0

ベストアンサー

java

1JMenuItem selectedItem = (JMenuItem)e.getSource();

たぶんここでJButtonが目的の型にキャストできないって言ってる

投稿2019/06/29 16:05

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ritsu

2019/06/29 16:16

回答ありがとうございます! selectedItemを使わず、終了ボタン表示のところと同じように String name = e.getActionCommand(); を使ったらエラー文は出なくなりました! でも、ポップアップの終了だけが機能しなくなってしまったのですが、原因わかりますでしょうか、、、 public void actionPerformed( ActionEvent e ){ JButton jbtn; String name = e.getActionCommand(); // ボタンのテキストを取得する if( name.equals( "コピー" ) ) System.out.println( "ポップアップの「コピー」アイテムが押された" ); else if( name.equals( "印刷" ) ) System.out.println( "ポップアップの「印刷」アイテムが押された" ); else if( name.equals( "終了" ) ){ System.out.println( "ポップアップの「終了」アイテムが押された" ); System.exit( 0 ); } if( name.equals( "終了ボタンの表示" ) ){ // 「表示」ボタンが押されたら jbtn = (JButton)e.getSource(); // イベントからJButtonのオブジェクトを取得 jbtn.setText( "終了ボタンの非表示" ); // そのボタンのテキストを「非表示」にする gPane.setVisible( true ); // グラスペインを可視にする }else if( name.equals( "終了ボタンの非表示" ) ){ // 「非表示」ボタンが押されたら jbtn = (JButton)e.getSource(); // イベントからJButtonのオブジェクトを取得 jbtn.setText( "終了ボタンの表示" ); // そのボタンのテキストを「表示」にする gPane.setVisible( false ); // グラスペインを非可視にする }else if( name.equals( "終了" ) ) // 「終了」ボタンが押されたら System.exit( 0 ); else super.actionPerformed( e ); // スーパークラスのハンドラに処理を任せる }
guest

0

註: 直接的な回答ではありません。

原因については、既にswordoneさんがご指摘のとおりです。


そもそもなぜこのようなバグが発生し得るかというと、
アクションの判別をactionPerformedに任せてしまっているからです。

一つのアクションに対して一つのアクションリスナーを作った方が見通しが良くなります。
匿名クラスやラムダ式を上手く用いれば、コードが過度に煩雑になることもありません。

Java

1var btn1 = new JButton("ボタン1"); 2btn1.addActionListener( 3 e -> System.out.println("ボタン1が押されたよ") 4);

投稿2019/06/29 16:44

編集2019/06/29 16:48
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ritsu

2019/06/30 05:44

回答ありがとうございます。 なるほど、ありがとうございます! 今後はなるべく分けて処理を書きたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問