2017-10-09 16 views
1

私は現在、学校のハングマンゲームをプログラミングしています。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

EDIT:これは私のクラスのメイン

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です:だから

+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

は、この行を追加しよう...私は

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

を追加し、それはまだ動作しませんバックエンド機能の初め

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

動作しません。私のクラスMainを追加しました。 – Jhidzzo