前提・実現したいこと
エラーを直して正常な動作をさせたいです。
あるサイトのじゃんけんゲームのプログラムを参考にしながら、コードを描いていたのですが、以下のようなエラーが発生して原因がわかりません。誰か教えてください!
発生している問題・エラーメッセージ
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at com.original_game.janken.Computer.decidesComputerHand(Computer.java:9) at com.original_game.janken.Player.actionPerformed(Player.java:46) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$500(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)
該当のソースコード
package com.original_game.janken; import javax.swing.JFrame; public class GameMain { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ //TODOウインドウ設定 JFrame frame=new JFrame("俺のじゃんけんゲーム"); frame.setSize(640,480); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setResizable(false); Panel.createPanel(frame); //TODOウインドウ表示 frame.setVisible(true); } } package com.original_game.janken; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Panel { public static JLabel headerLabel; public static JLabel contentsLabel; public static void createPanel(JFrame frame) { //TODO ヘッダーパネル Dimension headerPanelDimension =new Dimension(640,50); JPanel headerPanel=setPanel(Color.BLACK,headerPanelDimension); JLabel headerLabel =new JLabel("じゃんけん勝負だ!!"); headerLabel =setFont(Color.WHITE,headerLabel,24); headerPanel.add(headerLabel); frame.add(headerPanel,BorderLayout.NORTH); //TODOコンテンツパネル Dimension contentsPanelDimension=new Dimension(640,380); JPanel contentsPanel =setPanel(Color.WHITE,contentsPanelDimension); JLabel contentsLabel =new JLabel("じゃんけん・・・"); contentsLabel=setFont(Color.BLACK,contentsLabel , 54); contentsPanel.add(contentsLabel); frame.add(contentsPanel,BorderLayout.CENTER); //TODOフッタパネル Dimension footerPanelDimension=new Dimension (640,50); JPanel footerPanel=setPanel(Color.BLACK,footerPanelDimension); Player.createButton(footerPanel); frame.add(footerPanel,BorderLayout.SOUTH); } public static JPanel setPanel(Color color,Dimension PanelDimension) { JPanel panel=new JPanel(); panel.setPreferredSize(PanelDimension); panel.setLayout(new BorderLayout()); panel.setBackground(color); return (panel); } public static JLabel setFont(Color clr,JLabel label,int strSize) { label.setForeground(clr); Font labelFont=new Font("MS ゴシック",Font.PLAIN,strSize); label.setFont(labelFont); label.setHorizontalAlignment(JLabel.CENTER); label.setVerticalAlignment(JLabel.CENTER); return(label); } } package com.original_game.janken; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JPanel; public class Player implements ActionListener { public static void createButton(JPanel footerPanel) { //ボタンを表示 JButton btnGu = new JButton("グー"); btnGu = setButton(btnGu); footerPanel.add(btnGu, BorderLayout.WEST); JButton btnChoki = new JButton("チョキ"); btnChoki = setButton(btnChoki); footerPanel.add(btnChoki, BorderLayout.CENTER); JButton btnPa = new JButton("パー"); btnPa = setButton(btnPa); footerPanel.add(btnPa, BorderLayout.EAST); } public static JButton setButton(JButton button) { int buttonSizeX = (640 - 20)/3; Dimension buttonDimesion = new Dimension(buttonSizeX, 50); button.setPreferredSize(buttonDimesion); Font buttonFont = new Font("MS ゴシック",Font.PLAIN,24); button.setFont(buttonFont); Player player = new Player(); button.addActionListener(player); return(button); } public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); int playerHand = 0; if (command.equals("グー")) playerHand = 1; else if (command.equals("チョキ")) playerHand = 2; else if (command.equals("パー")) playerHand = 3; int computerHand = Computer.decidesComputerHand(); VictoryOrDefeat.decisionVictoryOrDefeat(computerHand, playerHand); } } package com.original_game.janken; import java.util.Random; public class Computer { public static int decidesComputerHand() { Random random =new Random(); int rnd = random.nextInt(3)+1; if (rnd ==1) Panel.contentsLabel.setText("グー"); else if (rnd ==2) Panel.contentsLabel.setText("チョキ"); else if (rnd ==3) Panel.contentsLabel.setText("パー"); return(rnd); } } package com.original_game.janken; public class VictoryOrDefeat { private static int point=0; public static final void decisionVictoryOrDefeat(int computerHand,int playerHand) { int playerHandTemp=playerHand; playerHandTemp++; if(playerHand==computerHand) { Panel.headerLabel.setText("あいこかよ!("+point+")"); } else if((playerHand==3&&computerHand==1)||(playerHandTemp==computerHand)) { point+=1; Panel.headerLabel.setText("お前の勝ちかよ!(" + point + ")"); } else { point=0; Panel.headerLabel.setText("お前の負けかよ!(" + point + ")"); } } }
試したこと
Computer.java:9とPlayer.java:46を参考にしたサイトと比較してみたのですが、同じ文章でした。
補足情報(FW/ツールのバージョンなど)
eclipseで書きました
実際に問題を解決するのは他人ではなくほかでもないあなたのはずですが?
これは質問ではなくデバッグ依頼、作業依頼です。そうでないならそのような印象をいだかせない質問の仕方を工夫してください。
回答2件
あなたの回答
tips
プレビュー