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

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

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

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

1211閲覧

パネルを表示させるとNullPointerException

cattus

総合スコア12

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2019/01/19 13:52

前提・実現したいこと

練習も兼ねて、Javaでボタンを押すとページが切り替わるというシステムを作っています。
該当のメソッドでは、現在表示しているパネルをsetVisible(false)、
表示するパネルをsetVisible(true)するという処理のみを行っています。
その、setVisible(true)する際にNullPointerExceptionが発生してしまいます。

発生している問題・エラーメッセージ

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at main.FrameMain.showPanel(FrameMain.java:41) at main.TitlePanel.actionPerformed(TitlePanel.java:39) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6539) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6304) at java.awt.Container.processEvent(Container.java:2239) at java.awt.Component.dispatchEventImpl(Component.java:4889) at java.awt.Container.dispatchEventImpl(Container.java:2297) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476) at java.awt.Container.dispatchEventImpl(Container.java:2283) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84) at java.awt.EventQueue$4.run(EventQueue.java:733) at java.awt.EventQueue$4.run(EventQueue.java:731) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) at java.awt.EventQueue.dispatchEvent(EventQueue.java:730) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) a

該当のソースコード

Java

1package main; 2 3 4import javax.swing.ImageIcon; 5import javax.swing.JButton; 6import javax.swing.JFrame; 7import javax.swing.JPanel; 8 9public class FrameMain extends JFrame 10{ 11 public String[] PanelNames = {"title", "difficulty", "question", "result", "option"}; 12 13 TitlePanel Ptitle = new TitlePanel(this, PanelNames[0]); 14 DifficultyPanel Pdifficulty = new DifficultyPanel(this, PanelNames[1]); 15 //TODO QuestionPanel Pquestion = new QuestionPanel(this, PanelNames[2]); 16 //TODO ResultPanel Presult = new ResultPanel(this, PanelNames[3]); 17 //TODO OptionPanel Poption = new OptionPanel(this, PanelNames[4]); 18 19 FrameMain() 20 { 21 this.add(Ptitle); 22 Ptitle.setVisible(true); 23 24 setTitle("Game"); 25 26 setSize(400, 400); 27 setLocationRelativeTo(null); 28 setResizable(false); 29 } 30 31 public static void main(String args[]) 32 { 33 FrameMain mainFrame = new FrameMain(); 34 mainFrame.setDefaultCloseOperation(EXIT_ON_CLOSE); 35 mainFrame.setVisible(true); 36 } 37 38 public static void showPanel(JPanel ShownPanel, JPanel PanelToShow) 39 { 40 ShownPanel.setVisible(false); 41 PanelToShow.setVisible(true); 42 } 43} 44 45class createButton extends JButton 46{ 47 public createButton(ImageIcon imagedefault, ImageIcon imageselected) 48 { 49 setIcon(imagedefault); 50 setRolloverIcon(imageselected); 51 setPressedIcon(imageselected); 52 setContentAreaFilled(false); 53 setBorderPainted(false); 54 setFocusable(false); 55 } 56}

Java

1package main; 2 3import java.awt.event.ActionEvent; 4import java.awt.event.ActionListener; 5 6import javax.swing.ImageIcon; 7import javax.swing.JPanel; 8 9public class TitlePanel extends JPanel implements ActionListener 10{ 11 FrameMain frameMain; 12 JPanel Pdifficulty; 13 14 TitlePanel(FrameMain fm, String name) 15 { 16 frameMain = fm; 17 this.setName(name); 18 19 ImageIcon start01 = new ImageIcon("./resource/img/start01.png"); 20 ImageIcon start02 = new ImageIcon("./resource/img/start02.png"); 21 ImageIcon result01 = new ImageIcon("./resource/img/result01.png"); 22 ImageIcon result02 = new ImageIcon("./resource/img/result02.png"); 23 ImageIcon quit01 = new ImageIcon("./resource/img/quit01.png"); 24 ImageIcon quit02 = new ImageIcon("./resource/img/quit02.png"); 25 26 createButton B1 = new createButton(start02, start01); 27 createButton B2 = new createButton(result02, result01); 28 createButton B3 = new createButton(quit02, quit01); 29 B1.addActionListener(this); 30 31 this.add(B1); 32 this.add(B2); 33 this.add(B3); 34 } 35 36 @Override 37 public void actionPerformed(ActionEvent e) 38 { 39 FrameMain.showPanel(this, Pdifficulty); 40 } 41}

試したこと

パネルを表示させる行を消すと、例外は発生しなかった。
メインメソッドを、invokeLaterに入れてみたが結果は同じであった。

補足情報(FW/ツールのバージョンなど)

Java8、Eclipse Photon

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

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

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

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

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

guest

回答2

0

ベストアンサー

PDifficultyが二か所にあります。

Java

public class FrameMain extends JFrame
{
...
DifficultyPanel Pdifficulty = new DifficultyPanel(this, PanelNames[1]);

Java

public class TitlePanel extends JPanel implements ActionListener
{
...
JPanel Pdifficulty;

TitlePanel#actionPerformed内で参照しているPdifficultyは、この後者です。
適切に初期化するようにしてください。

その他気になること

とりあえずすぐ直せそうな部分だけ。

  • フィールドの可視性は、基本的にprivateにします。
  • クラス名はUpperCamelCaseで書きます。

createButtonCreateButton

  • メソッド名、変数名はlowerCamelCaseで書きます。

PdifficultypDifficulty

投稿2019/01/19 14:06

LouiS0616

総合スコア35660

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

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

cattus

2019/01/19 14:35

それぞれの名前を適用なものに変更しました。 そして、参照しているpDifficultyが違うことに気付いていませんでした。 ありがとうございました。
guest

0

TitlePanel内のPdifficulityがnullのままFrameMain.showPanel()に渡されています。
Pdifficulityにインスタンスを割り当てておきましょう。

現状表示内容が決まっていないのであれば、

Java

1Pdifficulity = new JPanel();

のみでエラーは解決されます。

投稿2019/01/19 14:02

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

cattus

2019/01/19 14:11

JPanel PdifficultyをJPanel Pdifficulty = new Pdifficultyに置き換えたところ、 例外は発生しなくなりました。 初歩的なミスだったようです。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問