2017-10-09 81 views
1

我目前正在为学校编写Hang子手游戏。HangMan JTexfield ActionListener java.lang.NullPointerException

我得到这个错误:异常在线程 “AWT-EventQueue的-0” 显示java.lang.NullPointerException

这是我的课HangManBackend:

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

/** 
* Created by Jhidzzo-Admin on 07.10.2017. 
* Project: Hangman 
*/ 

class HangManBackend 
{ 
    static String words[] = new String[10]; 
    static String inputSTR; 
    static boolean userInput; 
    static char input; 
    static char inputChar; 
    static Scanner reader = new Scanner(System.in); 
    static boolean sucess = false; 
    static boolean fail = false; 
    static int found = 0; 
    static int guessedChars = 0; 
    static int fails = 0; 
    static int rngI; 
    static char unkownChars[]; 
    static char knownChars[]; 

    static void backend(int rngI) 
    { 

     words[0] = "Banane"; 
     words[1] = "Apfel"; 
     words[2] = "Birne"; 
     words[3] = "Blau"; 
     words[4] = "Grün"; 
     words[5] = "Gelb"; 
     words[6] = "Rot"; 
     words[7] = "Weiß"; 
     words[8] = "Orange"; 
     words[9] = "Grau"; 

     int length = words[rngI].length(); 
     char unkownChars[] = words[rngI].toCharArray(); 
     char knownChars[] = new char[length]; 

     for (int j = 0; j < knownChars.length; j++) 
     { 
      knownChars[j] = '-'; 
     } 

     System.out.println(unkownChars); 

     System.out.println("Guess a letter!"); 
    }//End method 

    static void checkUserInput() 
    { 
     while (!sucess && !fail) 
     { 
      if (fails < 3) 
      { 
       //char input = reader.next(".").charAt(0); 
       System.out.println(inputChar + " Input given!"); 
       input = inputChar;       // Here happens the error 
       for (int i = 0; i < unkownChars.length; i++) 
       { 
        if (input == unkownChars[i] || input == Character.toLowerCase(unkownChars[i])) 
        { 
         knownChars[i] = unkownChars[i]; 
         found++; 
        } 
       } 
       if (found == 0) 
       { 
        fails++; 
        System.out.println("Nope letter is not in there!"); 
        if (fails < 3) 
        { 
         System.out.println("Enter your next guess!"); 
        } 
       } else 
       { 
        guessedChars = guessedChars + found; 
        if (found == 1) 
        { 
         System.out.println("Cool you found " + found + " letter!"); 
        } else if (found > 1) 
        { 
         System.out.println("Cool you found " + found + " letters!"); 
        } 
        found = 0; 
        if (guessedChars != knownChars.length) 
        { 
         System.out.println(knownChars); 
         System.out.println("Enter next guess!"); 
        } 
       } 
       if (guessedChars == knownChars.length) 
       { 
        sucess = true; 
        System.out.println("Good job you got the whole word: " + words[rngI]); 
       } 
      } else if (fails >= 3) 
      { 
       System.out.println("You failed!"); 
       fail = true; 
      } 
      userInput = false; 
     }//End while 
    } 

    static int getWordsLength() 
    { 
     int WLength = words.length; 

     return WLength; 

    } 

    static void setInput(String inputA) 
    { 
     inputSTR = inputA; 
     inputChar = inputSTR.charAt(0); 
     checkUserInput(); 
    } 

    static void listener() 
    { 
     Main.submit.addActionListener(new ActionListener() 
     { 
      @Override 
      public void actionPerformed(ActionEvent e) 
      { 
       setInput(Main.input.getText()); 
       Main.input.setText(null); 
      } 
     }); 
    } 

} 

我认为错误发生在那里我标记了它。我没有任何想法修复它...我尝试使用同步,但我没有真正实现它。

谢谢你的回答!

btw我来自德国,所以不介意我的坏英语。 :d

编辑:这是我的课主要

import jdk.internal.util.xml.impl.Input; 

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

/** 
* Created by Jhidzzo-Admin on 07.10.2017. 
* Project: Hangman 
*/ 

public class Main 
{ 
    static JTextField input = new JTextField(10); 
    static JButton submit = new JButton("Try your Luck"); 
    public static void main(String[] args) 
    { 



     JFrame frame = new JFrame("HangMan"); 

     frame.add(input); 
     frame.add(submit); 

     /* 
     --------------- 
      Layout 
     --------------- 
     */ 

     frame.setLayout(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridwidth = GridBagConstraints.REMAINDER; 
     gbc.fill = GridBagConstraints.HORIZONTAL; 

     /* 
     --------------- 
      General 
     --------------- 
     */ 

     frame.setSize(500, 300); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     frame.setVisible(true); 

     int rng1 = randomWithRange(0, HangManBackend.getWordsLength() - 1); 

     HangManBackend.listener(); 
     HangManBackend.backend(rng1); 
    } 
    static int randomWithRange(int min, int max) 
    { 
     int range = (max - min) + 1; 
     return (int) (Math.random() * range) + min; 
    } 
} 

编辑:所以我添加

  System.out.println(inputSTR + " Input given!"); 
      if (inputSTR != null) 
      { 
       input = inputSTR.charAt(0); 
      }else 
      { 
       listener(); 
      } 

,它仍然没有工作...

+1

[什么是NullPointerException,以及如何解决它?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it/) – Grimthorr

+0

“当你声明一个变量但没有创建一个对象时,你询问的异常就会发生。”这是我的情况吗? sry我仍然没有得到它... – Jhidzzo

+0

我看不到'Main.submit'声明在哪里。你可以发布你的所有来源吗? – markspace

回答

1

尝试在添加此行您的后端功能的开始

static void backend(int rngI) 
{ 
    if(rngI > 9 || rngI<0) 
    {System.out.println("number not supported "); 
    } 
+0

不工作。添加了我的课程主要有rngI创建。 – Jhidzzo