2016-04-01 13 views
0

こんにちは、Jswingのメソッド内でイベントハンドラを使用しています。イベントがトリガされたときにエラーが発生しました"AWT-EventQueue-0" java.lang.NullPointerException。私はGUIクラスを含めて、何が起こっているのかを知ることができます。問題はメソッドsetPlayerNameScreenとその内部のイベントハンドラで発生します。日食を使用して。スレッド「AWT-EventQueue-0」の例外java.lang.NullPointerException Jswingの問題

通常、私のgooglefuはこれが私の最初の投稿であるため、かなり強力です。私はこのhahaを修正するまで私が上に移動することはできませんので、どんな助けも大いに感謝しています。

編集:実際にコードの内容を説明しているはずです。イベントsetPlayerNameScreenが前回のイベントから呼び出されたときは、現在のプレイヤー数が最大のプレイヤー数より少ないかどうかをチェックし、そうであれば、プレイヤー名をテキストフィールドに変更して、現在のプレイヤー数にセット1を加えてリセットしますテキストフィールド。

//Main game GUI class 
import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.math.*; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 
import java.awt.FlowLayout; 
import javax.swing.JLabel; 
import javax.swing.SwingConstants; 
import javax.swing.JButton; 
import javax.swing.JTextField; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

public class GameGUI extends JFrame 
{ 

private JPanel startPanel; 
private JPanel playerNamePanel; 
private JTextField txtPlayerNumber; 
GameManager gameMngr; 
private int currentPlayer; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) 
{ 
    EventQueue.invokeLater(new Runnable() 
    { 
     public void run() 
     { 
      try 
      { 
       GameGUI frame = new GameGUI(); 
       frame.setVisible(true); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
public GameGUI() 
{ 


    //Setup our game manager object 
    GameManager gameMngr = new GameManager(); 
    //int for tracking current active player 
    int currentPlayer = 1; 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 450, 300); 
    startPanel = new JPanel(); 
    startPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(startPanel); 
    startPanel.setLayout(null); 

    JLabel lblTitle = new JLabel("Who Wants To Be a Zillionaire!"); 
    lblTitle.setBounds(5, 5, 424, 14); 
    lblTitle.setHorizontalAlignment(SwingConstants.CENTER); 
    startPanel.add(lblTitle); 

    JLabel lblPlayerNumber = new JLabel("Please Enter How Many Players (max 4)"); 
    lblPlayerNumber.setBounds(99, 55, 243, 92); 
    lblPlayerNumber.setHorizontalAlignment(SwingConstants.CENTER); 
    startPanel.add(lblPlayerNumber); 

    txtPlayerNumber = new JTextField(); 
    txtPlayerNumber.setHorizontalAlignment(SwingConstants.CENTER); 
    txtPlayerNumber.setBounds(116, 153, 200, 20); 
    startPanel.add(txtPlayerNumber); 
    txtPlayerNumber.setColumns(10); 

    //action listener for game start screen button 
    JButton btnStart = new JButton("Start!"); 
    btnStart.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent arg0) 
     { 
      //button has been pressed so pass player count and prepare for player names 
      int playerCount = Integer.valueOf(txtPlayerNumber.getText()); 
      gameMngr.setPlayerCount(playerCount); 
      //set current panel invisible 
      startPanel.setEnabled(false); 
      startPanel.setVisible(false); 
      setPlayerNameScreen(); 

     } 
    }); 
    btnStart.setBounds(171, 200, 89, 23); 
    startPanel.add(btnStart); 
} 

private void setPlayerNameScreen() 
{ 

    //setup the player name setting panel 
    playerNamePanel = new JPanel(); 
    playerNamePanel.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(playerNamePanel); 
    playerNamePanel.setLayout(null); 

    JLabel lblPlayerName = new JLabel("Player 1 Enter Your Name"); 
    lblPlayerName.setHorizontalAlignment(SwingConstants.CENTER); 
    lblPlayerName.setBounds(87, 11, 259, 14); 
    playerNamePanel.add(lblPlayerName); 

    JTextField txtPlayerName = new JTextField(); 
    txtPlayerName.setHorizontalAlignment(SwingConstants.CENTER); 
    txtPlayerName.setBounds(172, 81, 86, 20); 
    playerNamePanel.add(txtPlayerName); 
    txtPlayerName.setColumns(10); 



    JButton btnPlayerNameConf = new JButton("OK"); 

    btnPlayerNameConf.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 

      if(currentPlayer <= gameMngr.getPlayerCount()) 
      { 
       gameMngr.addPlayer(txtPlayerName.getText(), currentPlayer); 
       currentPlayer++; 
       txtPlayerName.setText(""); 
       lblPlayerName.setText("Player " + currentPlayer + " Enter Your Name"); 
      } 
     } 
    }); 
    btnPlayerNameConf.setBounds(172, 142, 89, 23); 
    playerNamePanel.add(btnPlayerNameConf); 
} 

}

EDIT2:フルエラー

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at GameGUI$3.actionPerformed(GameGUI.java:132) 
    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) 
+0

完全な例外スタックトレース?また、あなたの質問に適切なタグを付けてください。 – bcsb1001

+0

もっと良いタグはありますか?申し訳ありません。私はあなたがエラーの後に物事の長いリストを意味することを押しつけるのを忘れてしまった...それを今編集する。 – Feetz

+0

GameGUI.javaのどの行が132行目かを指摘できますか? – bcsb1001

答えて

2

GameGUIに次のように問題文は次のとおりです。

GameManager gameMngr = new GameManager(); 
ここ

、あなたがローカル変数を作成している見えますそのコンストラクタからのものです。 フィールドgameMngrとは異なります。これはあなたが書いておくべきだと思います。単に割り当てを変更することで、そうする:Javaはあなたに割り当てられることはありませんフィールドを、意味を前提として

もちろん
gameMngr = new GameManager(); 

は、setPlayerNameScreen()でのアクション・リスナーは、コンストラクタからローカル変数にアクセスすることはできません(それはnullです - したがって、NullPointerException)。

+0

あなた1つ以上のクッキーに値する。そんな愚かな間違いと私はそれを見ることを考えなかった。コードは、現在、期待どおりに実行されます。どうもありがとうございます! – Feetz

関連する問題