Java 需要帮助修复NullPointerException吗

Java 需要帮助修复NullPointerException吗,java,Java,我是刽子手。当我运行代码时,我得到了几个空指针异常,不知道如何修复 编译错误确切地说是这样的: Exception in thread "main" java.lang.NullPointerException at hangmanrevised.createGame(hangmanrevised.java:66) at hangmanrevised.<init>(hangmanrevised.java:35) at hangmanrevised.main(hangma

我是刽子手。当我运行代码时,我得到了几个空指针异常,不知道如何修复

编译错误确切地说是这样的:

 Exception in thread "main"
 java.lang.NullPointerException at
 hangmanrevised.createGame(hangmanrevised.java:66)
 at
 hangmanrevised.<init>(hangmanrevised.java:35)
 at
 hangmanrevised.main(hangmanrevised.java:202)
线程“main”中出现异常 位于的java.lang.NullPointerException 创建游戏(HangmanRevied.java:66) 在 HangmanRevied.(HangmanRevied.java:35) 在 main(hangmanrevised.java:202) 感谢您的帮助

import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import java.lang.reflect.Array;
import javax.swing.*;


public class hangmanrevised extends JFrame implements ActionListener  {

    private int wrongs;
    private String right;
    private StringBuffer guess;
    private TextField Letter;
    private String message;
    private String information;
    private JButton button;
    private final int hung = 11;


    public hangmanrevised() {
    setSize(600,400);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLayout(new FlowLayout());

    ImageIcon background = new ImageIcon("nightsky.png");
    TextField Letter = new TextField();
    JLabel label = new JLabel("pick a Letter");
    Button button = new Button("Enter");
    add(label);
    add(button);
    add(Letter);

    button.addActionListener(this);

    createGame(); 
    } 



    public void createGame(){

        wrongs = 0;

        String word = "school|java|programming|science|computer";
        String[] temp;

        String delimiter = "\\|";

        temp = word.split(delimiter);

        Random randomPicker = new Random();


        int randomWord = randomPicker.nextInt(temp.length);

        right = new String(temp[randomWord]);

        char positions[] = new char[right.length()];
        for (int i = 0; i < right.length(); i++) {
        positions[i] = '-';

        }
        String s = new String(positions);
        guess = new StringBuffer(s);

        Letter.setText("");

        message="";
        information = "";
        repaint();
        }



    public void paint(Graphics g) {
         super.paint(g);
          //g.drawImage(background, 0, 156, Color.green, Enter);


         int baseY = 350;
         g.setColor(Color.lightGray);
          g.drawRect(0, baseY,400,baseY);
         g.fillRect(0, baseY,400,baseY);

            g.setColor(Color.darkGray);
            //g.drawRect(250,50,125,50);
           //g.fillRect(250,50,125,50);

         if (wrongs > 0){ 
        g.drawLine(125,baseY,125,baseY-100);
         g.drawLine(123,baseY,123,baseY-100);
        }
        if (wrongs > 1){
        g.drawLine(110,baseY,125,baseY-15);
        g.drawLine(108,baseY,122,baseY-15);
         }
        if (wrongs > 2){
        g.drawLine(140,baseY,125,baseY-15);
         g.drawLine(138,baseY,122,baseY-15);
        }
        if (wrongs > 3){ 
        g.drawLine(125,baseY-100,175,baseY-100);
         g.drawLine(125,baseY-98,175,baseY-98);
        }
        if (wrongs > 4){ 
        g.drawLine(175,baseY-100,175,baseY-75);
        }
        if (wrongs > 5){ 
        g.drawOval(170,baseY-75,10,12);
        }
        if (wrongs > 6){
        g.drawOval(160,baseY-65,15,25);
         g.fillOval(160,baseY-65,15,25);
        }
        if (wrongs > 7){ 
        g.drawLine(150,baseY-65,170,baseY-60);
        }
        if (wrongs > 8){
        g.drawLine(173,baseY-60,193,baseY-65);
        }
        if (wrongs > 9){ 
        g.drawLine(155,baseY-30,170,baseY-45);
        }
        if (wrongs > 10){
        g.drawLine(173,baseY-45,193,baseY-30);
        }


        g.drawString( message, 60, baseY+25 );
        g.drawString( information, 25, baseY+45 );
        g.drawString( new String (guess), 110, 60);
         //listener();
        }

public void actionPerformed(ActionEvent e){

        if (e.getSource() == button){

        processTurn();

        Letter.setText("");
        repaint();
        }
        }

    private void processTurn(){
        String s, t;
        char a;

        s = Letter.getText();
        a = s.charAt(0);

        if (!Character.isLetter(a)){
        message="Letters only";
        return;
        }
        if (s.length()>1){
        message="Enter 1 letter only";
        return;
        }

        t = new String(guess);
        if (t.indexOf(s) != -1){
        JOptionPane.showMessageDialog(null, "LETTER USED ALREADY");

        return;
        }



        if (right.indexOf(s) == -1){
        message="";
        wrongs++;
        if (wrongs == hung){
        JOptionPane.showMessageDialog(null, "YOU LOST!");


        }

        return;
        }

        for (int i = 0; i < right.length(); i++){
        if (right.charAt(i) == a){
        guess.setCharAt(i, a);
        }
        }
        t = new String(guess);


        if (t.indexOf('-') == -1){
      JOptionPane.showMessageDialog(null, "YOU WIN!");
      message="You win!";
        return;
        }

        message="";
        repaint();
        }

    public static void main(String[] args) {
        hangmanrevised f = new hangmanrevised();
        f.setVisible(true);

    }
}
import java.awt.*;
导入java.awt.event.*;
导入java.util.Random;
导入java.lang.reflect.Array;
导入javax.swing.*;
公共类Hangman实现了ActionListener{
私人恩怨;
私有字符串权;
私有字符串缓冲区猜测;
私人TextField信件;
私有字符串消息;
私有字符串信息;
私人按钮;
私人最终总积分=11;
公共绞刑{
设置大小(600400);
setLocationRelativeTo(空);
setDefaultCloseOperation(关闭时退出);
setLayout(新的FlowLayout());
ImageIcon background=新的ImageIcon(“nightsky.png”);
TextField字母=新的TextField();
JLabel标签=新JLabel(“选择字母”);
按钮按钮=新按钮(“输入”);
添加(标签);
添加(按钮);
加(信);
addActionListener(这个);
createGame();
} 
公共游戏(){
错误=0;
String word=“学校| java |编程|科学|计算机”;
字符串[]温度;
字符串分隔符=“\\\\;”;
temp=字分割(分隔符);
随机选取器=新随机();
int randomWord=randomPicker.nextInt(临时长度);
右=新字符串(临时[randomWord]);
字符位置[]=新字符[right.length()];
for(int i=0;i0){
g、 抽绳(125,baseY,125,baseY-100);
g、 抽绳(123,baseY,123,baseY-100);
}
如果(错误>1){
g、 抽绳(110,baseY,125,baseY-15);
g、 抽绳(108,baseY,122,baseY-15);
}
如果(错误>2){
g、 抽绳(140,baseY,125,baseY-15);
g、 抽绳(138,baseY,122,baseY-15);
}
如果(错误>3){
g、 抽绳(125,baseY-100175,baseY-100);
g、 抽绳(125,baseY-98175,baseY-98);
}
如果(错误>4){
g、 抽绳(175,baseY-100175,baseY-75);
}
如果(错误>5){
g、 drawOval(170,baseY-75,10,12);
}
如果(错误>6){
g、 drawOval(160,baseY-65,15,25);
g、 圆形(160,baseY-65,15,25);
}
如果(错误>7){
g、 抽绳(150,baseY-65170,baseY-60);
}
如果(错误>8){
g、 抽绳(173,baseY-60193,baseY-65);
}
如果(错误>9){
g、 抽绳(155,baseY-30170,baseY-45);
}
如果(错误>10){
g、 抽绳(173,baseY-45193,baseY-30);
}
g、 抽绳(消息,60,baseY+25);
g、 抽绳(信息,25,baseY+45);
g、 抽绳(新绳(猜测),110,60);
//监听器();
}
已执行的公共无效操作(操作事件e){
如果(例如getSource()==按钮){
processTurn();
字母.setText(“”);
重新油漆();
}
}
私有void processTurn(){
字符串s,t;
字符a;
s=Letter.getText();
a=s.charAt(0);
if(!Character.isleter(a)){
message=“仅限信函”;
返回;
}
如果(s.长度()>1){
message=“仅输入1个字母”;
返回;
}
t=新字符串(猜测);
如果(t.indexOf(s)!=-1){
showMessageDialog(null,“已使用的字母”);
返回;
}
if(右索引of)=-1){
message=“”;
错误++;
如果(错误==挂起){
showMessageDialog(null,“您丢失了!”);
}
返回;
}
for(int i=0;i
尝试只使用“|”作为分隔符

看看巴卢斯的评论。能够以简单的形式解决问题并运行调试器是很重要的

在构造函数中,您意外地将
newtextfield()
赋值给局部变量而不是字段

改变

TextField Letter = new TextField();


顺便说一句,我强烈建议您以小写开头变量,以大写开头类名,即

  • 字母
    而不是
    字母
  • HangmanRevised
    代替
    HangmanRevised

如何调试:感谢您的帮助。没有空指针异常,但当我现在运行它时,我输入一个字母并单击enter,什么也没有发生。猜猜看?也许actionevent是错的?也许是。我建议你发布一个新问题,并描述零售业的问题。很抱歉在这里发布给你。但你似乎是唯一一个知道好答案的人
Letter = new TextField();