2016-04-01 14 views
0

Merhaba, aslında bir olay işleyicisi Jswing için bir yöntem içinde kullanmaya çalışıyorum ve olay tetiklendiğinde hata alıyorum Hata iş parçacığı içinde "AWT-EventQueue-0" java.lang.NullPointerException. GUI sınıfını ekledim, böylece neler olduğunu anlayabiliyorsun. Sorun, setPlayerNameScreen yöntemiyle ve etkinlik işleyicisiyle ilgilidir. Tutulmayı kullanma."AWT-EventQueue-0" iş parçacığındaki özel durum java.lang.NullPointerException Jswing sorunu

Genellikle googlefu'm gayet güçlüdür, çünkü bu benim ilk kez herhangi bir sitede yardım için gönderim! Bu haha'yı tamir edene kadar devam edemediğim için herhangi bir yardım büyük takdir görüyor.

Düzenleme: Kodun ne yaptığını açıklamalıydı. Bir önceki etkinlikten setPlayerNameScreen olayı çağrıldığında, mevcut oyuncu sayımızın azami oyuncudan az olup olmadığını kontrol ediyoruz ve eğer varsa, oyuncu adını metin alanında ne olursa olsun değiştirin, set 1'i mevcut oyuncu sayımıza ekleyin ve sıfırlayın metin alanı

//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: Tam hata

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

Tam istisna yığını izleme? Ayrıca, sorunuzu doğru bir şekilde etiketleyin. – bcsb1001

+0

Etiketler şimdi daha iyi mi? Üzgünüm, daha önce hiç yayınlamadım. Unuttuğum hatadan sonra uzun bir eşya listesi demek istedim. Şimdi onu düzenliyorum. – Feetz

+0

GameGUI.java'da hangi hattın hat 132 olduğunu belirtebilir misiniz? – bcsb1001

cevap

2

GameGUI aşağıdaki şekilde sorunlu bir ifadedir:

GameManager gameMngr = new GameManager(); 
Burada

, bir yerel değişken yaratıyor görünür sadece bu kurucudan. Yazmak gerektiğini düşünüyorum bu alangameMngr farklıdır. basitçe atamayı değiştirerek bunu yapın: Java Atanmadığınız asla alanını demek varsayar böylece

Elbette
gameMngr = new GameManager(); 

, setPlayerNameScreen() aksiyon dinleyici, yapıcı yerel değişken erişemez (o null olduğunu - dolayısıyla NullPointerException).

+0

Siz bayın. 1'den fazla cookie'ye layık. Böyle aptalca bir hata ve oraya bakmayı düşünmedim. Kod şimdi beklendiği gibi yürütülür. Çok teşekkür ederim! – Feetz

İlgili konular