无法使用JTextArea修复NullPointerException

时间:2016-08-05 03:27:18

标签: java swing nullpointerexception jframe

我正在尝试在jframe中运行基于文本的冒险,但是当我运行程序时,我在行NullPointer上收到97 (first time i append console in the game method)错误,我不知道如何修复它。我对java比较新,所以它可能很简单,我不知道。

我的代码在这里

package window;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Gui extends JFrame {

public JPanel contentPane;
public static JTextField input;
public static JButton send;
public static JTextArea console;
public static JTextArea invintory;
public static JTextArea stats;
static String i = "";

/**
 * Launch the application.
 */



/**
 * Create the frame.
 */
public Gui() {
    //variables

    int Gold = 20;
    int Health = 100;
    int MaxHealth = 100;


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

    JTextArea console = new JTextArea();
    console.setBounds(10, 11, 281, 214);
    contentPane.add(console);

    input = new JTextField();
    input.setBounds(10, 236, 281, 20);
    contentPane.add(input);
    input.setColumns(10);

    JTextArea stats = new JTextArea();
    stats.setBounds(301, 11, 123, 53);
    contentPane.add(stats);

    JTextArea invintory = new JTextArea();
    invintory.setBounds(301, 75, 128, 137);
    contentPane.add(invintory);

    JButton send = new JButton("Send");
    send.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            String i = input.getText();
            input.setText("");
            stats.setText("");
            stats.append("Health: " + Health + "/" + MaxHealth + "\n");
            stats.append("Gold: " + Gold);
        }
    });
    send.setBounds(301, 224, 128, 32);
    contentPane.add(send);

    stats.append("Health: " + Health + "/" + MaxHealth + "\n");
    stats.append("Gold: " + Gold);

}

public static void game (JButton send, JTextArea console, JTextArea stats, JTextArea invintory, JTextField input, String i) {




    //start
    //START
    //START
    //START
    //START
    while (true) {          
        console.append("You wake up open feild, with vast amounts of wheet in every direction");
        console.append("There is a path going in either direction what do you want to do");
        console.append("\t1. Go left.");
        console.append("\t2. Go right.");   
        while (i == "") {
        }
        if (i == "1") {
            console.append("1");
            break;
        }
        else if (i == "2") {
            console.append("2");
            break;
        }



    }
    //END
    //END
    //END
    //END
    }

public static void main(String[] args) {
            try {
                Gui frame = new Gui();
                frame.setVisible(true);
                Gui.game(send, console, stats, invintory, input, i);
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

}

1 个答案:

答案 0 :(得分:1)

在全局变量中console为空

public static JTextArea console;

您在Gui方法

中对其进行了初始化
JTextArea console = new JTextArea();

所以在Gui方法中,您的全局console变量未初始化,这会在Gui方法下创建一个局部变量控制台。

要在Gui方法中初始化全局变量,您需要以这种方式初始化

console = new JTextArea();

你对所有变量都犯了这个错误,所以这样编辑你的代码

public Gui() {
    //variables

    int Gold = 20;
    int Health = 100;
    int MaxHealth = 100;


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

    console = new JTextArea();
    console.setBounds(10, 11, 281, 214);
    contentPane.add(console);

    input = new JTextField();
    input.setBounds(10, 236, 281, 20);
    contentPane.add(input);
    input.setColumns(10);

    stats = new JTextArea();
    stats.setBounds(301, 11, 123, 53);
    contentPane.add(stats);

    invintory = new JTextArea();
    invintory.setBounds(301, 75, 128, 137);
    contentPane.add(invintory);

    send = new JButton("Send");
    send.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            String i = input.getText();
            input.setText("");
            stats.setText("");
            stats.append("Health: " + Health + "/" + MaxHealth + "\n");
            stats.append("Gold: " + Gold);
        }
    });
    send.setBounds(301, 224, 128, 32);
    contentPane.add(send);

    stats.append("Health: " + Health + "/" + MaxHealth + "\n");
    stats.append("Gold: " + Gold);

    }