前提・実現したいこと
練習も兼ねて、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
回答2件
あなたの回答
tips
プレビュー