2016-08-05 110 views
0

我想使一个基于文本的冒险运行在一个jframe,但是当我运行该程序时,我得到NullPointer错误行97 (first time i append console in the game method),我不知道如何解决它。我对java比较新,所以它可能很简单,我只是不知道。无法修复与JTextArea NullPointerException

我的代码是在这里

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(); 
      } 

     } 

} 
+0

显示错误日志,请 –

回答

1

在你的全局变量console为空

public static JTextArea console; 

您在Gui方法

JTextArea console = new JTextArea(); 

Gui方法全局console初始化它所以在这里变量不是我nitialized,这将创建一个局部变量控制台根据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); 

    }