2016-11-11 6 views
0

私はJavaでゲームをしていて、JTextAreaを作成して大部分のテキストを表示し、textPrinterメソッドを使ってJTextAreaにテキストを追加しています。しかし、私はtextPrinterを呼び出すときはいつでも、私はnullポインタの例外を取得します。私は、System.out.println(text)がtextPrinterメソッドから実行されたときに値が正しく渡されたことを示すので、メソッドに渡す文字列がnullではないことを知っています。JTextArea.append()メソッドはnullポインタ例外を返します

私のメインクラスから関連コード:私のTextHandlerクラスから

public class stickGame { 

public JTextArea gameText; 
public JPanel gamePanel; 
public JFrame gameWindow; 

public static void main(String[] args) { 
stickGame game = new stickGame(); 
TextHandler text = new TextHandler(); 
gameEnabled = true; 

while (gameEnabled == true) { 

    MainMenu menu = new MainMenu(); 
    victory = false; 

    //SinglePlayer Logic 
    if (gameMode == 1) { 

     gameLevel = 0; 

     while (defeat != true) { 

      playerHealth = 100; 
      aiHealth = 100 + (25 * gameLevel); 
      pRage = 0; 
      aiRage = 0 + (10 * gameLevel); 
      secondPRage = 0; 
      secondPlayerHealth = 100; 
      text.textPrinter("Level "+ (gameLevel + 1)+"\n"); 
       } 
      } 
     } 
    } 

コード:ここで

import java.util.Scanner; 
import java.util.Random; 
import java.util.concurrent.TimeUnit; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class TextHandler extends stickGame { 

private String pText; 

public void WindowHandler() { 

    gameWindow = new JFrame("Stick Game"); 
    gameWindow.setVisible(true); 
    gameWindow.setSize(1000, 600); 

    gamePanel = new JPanel(); 
    gamePanel.setMaximumSize(new Dimension(200, 120)); 
    gamePanel.setVisible(true); 

    gameText = new JTextArea(); 
    gameText.setSize(600, 600); 
    gameText.setLineWrap(true); 
    gameText.setVisible(true); 
    gameText.setFont(new Font("monospaced", Font.PLAIN, 12)); 

    JButton attackB = new JButton("Attack"); 
    JButton blockB = new JButton("Block"); 
    JButton rushB = new JButton("Rush"); 
    JButton healB = new JButton("Heal"); 
    JButton ultimateB = new JButton("Ultimate"); 
    JButton cheatB = new JButton("Cheat"); 

     attackB.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      playerMoveChoice = "attack"; 
      duplicateCheck = true; 
      } 
     }); 

     blockB.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
       playerMoveChoice = "block"; 
       duplicateCheck = true; 
       } 
     }); 

     rushB.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
       playerMoveChoice = "rush"; 
       duplicateCheck = true; 
       } 
     }); 

     healB.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      playerMoveChoice = "heal"; 
      duplicateCheck = true; 
      } 
     }); 

     ultimateB.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      playerMoveChoice = "ultimate"; 
      duplicateCheck = true; 
      } 
     }); 

     cheatB.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      pRage = stickGame.pRage + 100; 
      } 
     }); 

    gamePanel.add(gameText); 
    gamePanel.add(attackB); 
    gamePanel.add(blockB); 
    gamePanel.add(rushB); 
    gamePanel.add(healB); 
    gamePanel.add(ultimateB); 
    gamePanel.add(cheatB); 
    gameWindow.add(gamePanel); 
    gameWindow.repaint(); 
} 


public void textPrinter(String text) { 
    System.out.println(text); 
    gameText.append(text); 
} 
} 

は誤りです:

Exception in thread "main" java.lang.NullPointerException 
    at TextHandler.textPrinter(TextHandler.java:113) 
    at stickGame.main(stickGame.java:431) 

NULLポインタthで例外が発生するe text.textPrinter( "レベル" +(gameLevel + 1)+ "\ n");主な方法で。正確に何が問題なのですか?それを修正するにはどうしたらいいですか?

答えて

0

JTextAreaは、決して呼び出されないWindowHandlerメソッドで構築されます。 TextHandlerを構築した後にWindowHandler()を呼び出すか、TextHandlerのコンストラクタから呼び出す

+0

これを追加するのを忘れてしまったのは、textPrinter()呼び出しの直後だったので、まだそれを初期化しました。おかげでXD –

関連する問題