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

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

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

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

Q&A

解決済

2回答

704閲覧

javaのエラーを解決してほしいです!

tsubasa3010

総合スコア14

Java

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

0グッド

0クリップ

投稿2019/03/08 13:22

前提・実現したいこと

エラーを直して正常な動作をさせたいです。
あるサイトのじゃんけんゲームのプログラムを参考にしながら、コードを描いていたのですが、以下のようなエラーが発生して原因がわかりません。誰か教えてください!

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

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で書きました

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

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

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

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

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

m.ts10806

2019/03/08 13:54

実際に問題を解決するのは他人ではなくほかでもないあなたのはずですが? これは質問ではなくデバッグ依頼、作業依頼です。そうでないならそのような印象をいだかせない質問の仕方を工夫してください。
guest

回答2

0

エラーメッセージにソースファイル名とエラーの行番号書いてるんだからそこを見ようよ。。

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

ヌルポインタアクセスしてるという例外なんで、そこの行で使われてる変数をすべてプリントアウトするなりして確認してみるべし。
null のものがあるならなぜそうなってるのかを考える。

投稿2019/03/08 13:24

編集2019/03/08 13:26
y_waiwai

総合スコア87719

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

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

y_waiwai

2019/03/08 13:31

で、Eclipse使ってるなら、ブレークポイント設定できるんだから、その行で止めて変数の内容を確認しよう。 ぐぐればやり方でてくるからがんばって
tsubasa3010

2019/03/08 23:36

そうですね、次から自分でいろいろ試してミスを見つけれるようがんばります!ありがとうございました!
guest

0

ベストアンサー

Panel.contentsLabelがnullだからです。
Javaでは代入されていない変数はnullになります。
よって、Panel.contentsLabelがおかしいということになります。

それでcontentsLabelでソース内を検索すると以下が出てきます。

(Panelクラス内)

Java

1 JLabel contentsLabel =new JLabel("じゃんけん・・・"); 2 contentsLabel=setFont(Color.BLACK,contentsLabel , 54);

このようにしてしまうと、1行目で新たにcontentsLabelが定義されており、2行目ではPanel.contentsLabelではなく、1行目のcontentsLabelに代入されてしまいます。
よって、以下のようにすれば直ると思います。

Java

1 contentsLabel =new JLabel("じゃんけん・・・"); 2 contentsLabel=setFont(Color.BLACK,contentsLabel , 54);

投稿2019/03/08 13:42

fiveHundred

総合スコア9778

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

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

tsubasa3010

2019/03/08 23:35

ありがとうございます!助かりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問