0

I am currently programming a Hangman game for school.

I do get this error: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

This is my class 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);
            }
        });
    }

}

I think the error happens where I marked it. I dont have any idea for fixing it... I tryed to use synchronize but I dont get it really.

Thank you for your answers!

Btw I am from germany so dont mind my bad english. :D

EDIT: This is my class Main

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

EDIT: So I added

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

and it still not works...

Jhidzzo
  • 77
  • 10
  • 1
    [What is a NullPointerException, and how do I fix it?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it/) – Grimthorr Oct 09 '17 at 15:58
  • "The Exception that you asked about occurs when you declare a variable but did not create an object." Is this the case for me? sry I still dont get it... – Jhidzzo Oct 09 '17 at 16:01
  • I don't see where `Main.submit` is declared. Could you post your all of your source please? – markspace Oct 09 '17 at 16:06
  • Exception would give more details on your issue – Alexey R. Oct 09 '17 at 16:09
  • `Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at HangManBackend.checkUserInput(HangManBackend.java:70) at HangManBackend.setInput(HangManBackend.java:129) at HangManBackend$1.actionPerformed(HangManBackend.java:139)` – Jhidzzo Oct 09 '17 at 16:15

1 Answers1

0

try to add this line in the beginning of your backend function

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