Error Meldung bei Gomoku Spiel

GutenTagNoch

Mitglied
Hallo Leute,
ich habe mich gerade eben hier angemeldet, weil ich einfach überfragt bin. Ich programmiere momentan das Spiel Gomoku (5 in einer Reihe) und bin nun auf die folgende Errormeldung gestoßen:
"java.lang.NullPointerException
at Player.setButton(Player.java:41)
at KiPlayer.begin(KiPlayer.java:21)"

Ich hänge jz noch die Klassen an, welche damit zusammmenhängen...

Die Klasse KiPlayer, die von einem MinMax Algorythmus gesteuert wird.
Java:
public class KiPlayer extends Player
{
    Brain brain;
    public KiPlayer(int f, int k, boolean turn) {
        super(f, k, turn);
        brain = new Brain();
    }

    String begin() {
        String l = "7 : 7";
        char b = '2';
        int c1;
        if (b=='1')
            c1 = 1;
            else if (b=='2')
                c1 = 2;
                else
                    c1 = 0;
        int x = StringToX(l);
        int y = StringToY(l);
        setButton(x, y, c1);
        System.out.println(x + " " + y + " " + c1);
        return l;
    }

    String doTurn() {
        String l = calcTurn();
        char b = '2';
        int c1;
        if (b=='1')
            c1 = 1;
            else if (b=='2')
                c1 = 2;
                else
                    c1 = 0;
        b1.makeMove(b, l, true);
        int x = StringToX(l);
        int y = StringToY(l);
        setButton(x, y, c1);
        System.out.println(x + " " + y + " " + c1);
        return l;
    }

    int StringToX (String s) {
        String[] ss = s.split(" : ");
        int x = Integer.parseInt(ss[0]);
        return x;
    }

    int StringToY (String s) {
        String[] ss = s.split(" : ");
        int y = Integer.parseInt(ss[1]);
        return y;
    }

    String calcTurn() {
        Object[] move = brain.ki(b1, 1, Double.NEGATIVE_INFINITY,
                Double.POSITIVE_INFINITY);
        return (String) move[1];
    }
}

Die Klasse BoardManipulationAndGameChecks, die überprüft allemöglichen Sachen für den MinMax Algorythmus. Habe die ein bisschen für hier drinnen gekürzt.
Java:
import java.util.*;
import java.lang.*;

public class BoardManipulationAndGameChecks
{
  public Frame frame;
  char[][] game;
  int k;
  int f;
  int nextPl;
  int prevPl;
  int gewinner;
  String update;

  public BoardManipulationAndGameChecks(int f, int k)
  {
  this.f = f;
  this.k = k;
  this.game = new char[f][f];

  for(int x = 0; x < f; ++x)  {
  for(int y = 0; y < f; ++y){
  this.game[x][y] = 0;
  }
  }
  this.gewinner = 0;
  }


  public void setButtons(int tempX, int tempY, int tempPl) {
  int x = tempX;
  int y = tempY;
  int pl = tempPl;
  frame.setButtonIcon(tempX,tempY,tempPl);

  //if(x = 1)
  //{
  //  System.out.println("false");
  //}
  //else{frame.setButtonIcon(x, y, pl);}
  }
}

und die Klasse Frame, die ist meine "Fenster"-Klasse, in der nur die Oberfläche generiert wird.
Java:
import java.awt.*;
import java.awt.event.ActionListener;
import javax.swing.*;

public class Frame extends JFrame
{
  Button[][] buttons = new Button[15][15];

  public Frame ()
  {
  super("ImageButton");
  setLayout(new BorderLayout(5,5));
  setJMenuBar(createmenu());
  getContentPane().add(createPanel(), "Center");

  for (int i = 0; i < 15; i++)
  {
  for (int j = 0; j < 15; j++)
  {
  buttons[i][j].setIcon((int)0);
  }
  }

  setVisible(true);
  pack();
  }



  JMenuBar createmenu()
  {
  JMenuBar MenuBar  = new JMenuBar();
  JMenu  MenuItem1 = new JMenu("Exit");
  JMenu  MenuItem2 = new JMenu("Test");
  MenuItem2.addActionListener(new ActionListener()
  {
  public void actionPerformed(java.awt.event.ActionEvent e)
  {
  System.exit(0);
  }
  });
  MenuBar.add(MenuItem1);
  MenuBar.add(MenuItem2);

  return MenuBar;
  }

  Component createPanel()
  {
  JPanel panel = new JPanel(new GridLayout(15, 15, 0, 0));
  // buttons[] = new Button[];
  int l = 0;
  for(int i = 0; i < 15; i++)
  {
  for(int j = 0; j < 15; j++)
  {
  buttons[i][j] = new Button();
  buttons[i][j].addActionListener(new Listener(buttons[i][j], l));
  panel.add(buttons[i][j]);
  }
  }
  return panel;
  }

  public void setButtonIcon(int tempX, int tempY, int tempPl)
  {
  int x = tempX;
  int y = tempY;
  int pl = tempPl;

  buttons[tempX][tempY].setIcon(tempPl);
  buttons[x][y].setEnabled(false);
  }
}

Zu guter letzt noch die Klasse Button, in dieser habe ich nur festgelegt wie die Buttons aussehen sollen.
Java:
import java.awt.*;
import javax.swing.*;

public class Button extends JButton
{
  private static ImageIcon pcIcon = new ImageIcon("images/Ki.png");
  private static ImageIcon plIcon = new ImageIcon("images/Player.png");
  private static ImageIcon noIcon = new ImageIcon("images/nichts.png");
  private static Insets noMargin = new Insets(0, 0, 0, 0);
  public int spalte;
  public int zeile;

  public Button()
  {
  setIcon(noIcon);
  setIconTextGap(0);
  setAlignmentX(0.5F);
  setAlignmentY(0.5F);
  setMargin(noMargin);
  }

  public void setIcon(int fall)
  {
  switch (fall)
  {
  case 2:
  setIcon(pcIcon);
  setDisabledIcon(pcIcon);
  break;

  case 1:
  setIcon(plIcon);
  setDisabledIcon(plIcon);
  break;

  default:
  setIcon(noIcon);
  }
  }

  public int getZeile()
  {
  return zeile;
  }

  public int getSpalte()
  {
  return spalte;
  }
}

Hier noch ein Bild von der Übersicht der Klassen.
lzmxacg8.png


Wenn ihr noch mehr braucht, wie Screenshots oder kompletten Code von den Klassen (hab nur die Board...Klasse für hier gekürzt) einfach schreiben.

Freue mich auf euere Hilfe,
LG Marco
 
Zuletzt bearbeitet von einem Moderator:
K

kneitzel

Gast
Also die NPE ist in der Player.java Zeile 41. Was machst Du da?
Hast Du es mal ein einer IDE mit einem Debugger ausgeführt? Du kannst ja den betreffenden Code Schritt für Schritt durchgehen und dann so nachvollziehen, was so passiert.

Und die Namen machen es extrem schwer, irgendwas nachzuvollziehen:
- Variablen f, k, l, ...
- Funktionen begin() die einen String zurück geben. Was so eine Funktion macht und/oder zurückgibt ist ja nicht zu erkennen.

Also da würde ich auf jeden Fall noch nachbessern.
 

GutenTagNoch

Mitglied
Hallo kneitzel,
In der Zeile 41 möchte ich die Werte von dem KiPlayer auf das Frame übergeben, denn genau darain liegt das Problem. Die Buttons auf dem Spielfeld können den Wert 0, 1, 2 annehmen, um die verschiedenen Images darauf zu laden. Jedoch funktioniert diese Übergabe iwie nicht.
In der Methode begin() wird einfach der erste Schritt des KiPlayers ausgeführt, diese sollte dann im Array game[][] von Board die x und y koordinaten eingeben und den Wer von dem Button auf 2 setzen, damit das richtige Bild auf dem Button angezeigt wird.
Die Variable f gibt die Felder an, also 15.
Die Variable k die Suchtiefe.
Der String "l" und auch "update" gibt die Koordinaten in einem String an, die Methoden zum umwandeln in ints oder int[][] sind auch in Board... oder in KiPlayer.

LG Marco
 
K

kneitzel

Gast
Ok, ich habe mir den Code jetzt einmal etwas angesehen und das Problem ist aus meiner Sicht, dass Du in BoardManipulationAndGameChecks frame als Instanzvariable definierst, aber diese Variable wird nie gesetzt. Daher ist dies natürlich null und Du bekommst dann bei allen Zugriffen eine NullPointerException.
 

GutenTagNoch

Mitglied
OK, könntest du mir villeicht wenn du ein paar Minuten Zeit hast, ein kleines Beispiel formulieren?
Ich weiß nicht wie ich es auf Anhieb ändern könnte...
 

Joose

Top Contributor
OK, könntest du mir villeicht wenn du ein paar Minuten Zeit hast, ein kleines Beispiel formulieren?
Ich weiß nicht wie ich es auf Anhieb ändern könnte...

Entweder erstellst du in der entsprechenden Klasse ein neues Objekt deiner Klasse "Frame" oder du übergibst dem Konstruktor ein Objekt dieser Klasse.

Anmerkung zum Code:
Frame ist eine schlechte Wahl für eine Klasse, da es so eine Klasse schon im JavaFramework gibt.
Sprechende Namen hat kneitzel schon erwähnt.

Verwende bei if-Bedingungen immer Klammern und eine korrekte Einrückung, dass macht den Code für dich und andere leichter lesbar :)
Java:
        if (b=='1')
            c1 = 1;
            else if (b=='2')
                c1 = 2;
                else
                    c1 = 0;
Für mich schaut das von der Einrückung danach aus, das die 2.if-Bedingung innerhalb des if-Blocks der 1.if-Bedingung sein soll.
Aber da keine Klammerung vorhanden ist handelt es sich um ein ganz normales if/elseif Konstrukt -> Das ist verwirrend!
Java:
if (b == '1') {
    c1 = 1;
} else if (b == '2') {
    c1 = 2;
} else {
    c1 = 0;
}
 

GutenTagNoch

Mitglied
Hallo Joose,
das werde ich gleich mal ausprobieren, danke! :)

Die Klasse "Frame" kann ich auch Fenster nennnen, das ist ja kein Problem.
Ich melde mich nachher nochmal ob es geklappt hat!

Jap...die If-Bedinung werde ich jz wieder korrekt einrücken, sry... :)
 
X

Xyz1

Gast
  1. Nicht-reicher Texteditor verwenden, der andere ist Käse,
  2. einmal Formatierung in deiner IDE erzwingen,
  3. ich hab noch nicht alle Klassen kopiert und kompiliert, kann dir deswegen noch keine weiteren Hilfe geben.
 

GutenTagNoch

Mitglied
Hallo,
ich habe nun die Error Meldungen behoben! Es lag wirklich an der fehlenden Initialsierung von der "Frame" Klasse.

Nun habe ich jedoch eine neue Frage!
Wenn ein Button gedrückt wird soll in dem Fenster ein "unsichtbares" Label auf den Text "true" gesetzt werden. Wie kann ich das realisieren? :)

PS: An alle VIELEN Dank für eure Hilfe! Hat mir bisher sehr weiter geholfen!! :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G IOException error 2 Allgemeine Java-Themen 3
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
Mick P. F. Wie kriege ich die Fehlermeldung "java: symbol lookup error: ..." weg? Allgemeine Java-Themen 11
S An internal error occurred during: Launching null argument Allgemeine Java-Themen 1
S Gradle "schluckt" output und error Allgemeine Java-Themen 1
Bluedaishi Access violation error Allgemeine Java-Themen 2
M Jdeps-Error durch multi-release Allgemeine Java-Themen 6
Xge For/Array Error: IndexOutOfBounds Allgemeine Java-Themen 4
S CMD Compiler Error Allgemeine Java-Themen 13
L Compiler-Fehler Eclipse Error: A JNI error has occured Allgemeine Java-Themen 3
T Eclipse IDE Plugin Error Log Allgemeine Java-Themen 0
Robat JNI - Fatal Error Allgemeine Java-Themen 5
S LinkedList Error Allgemeine Java-Themen 4
F String Error Allgemeine Java-Themen 7
K Error Allgemeine Java-Themen 2
J LWJGL 3 Error Code 1282 Allgemeine Java-Themen 4
N Maven ObjectMapper Error wenn das File gespeichert wird Allgemeine Java-Themen 0
D Datentypen Cache Images Heap Space Error Allgemeine Java-Themen 7
D Java Error String kann nicht in Int umgewandelt werden Allgemeine Java-Themen 2
L Exception/Error auf JDialog umleiten Allgemeine Java-Themen 2
G Java Error (Exception_acces_violation) Allgemeine Java-Themen 2
G Java Error (Exception_acces_violation) Allgemeine Java-Themen 0
Thallius Simple JSON Parser Error null Allgemeine Java-Themen 6
F Compiler-Fehler Hilfe bei Startup error Allgemeine Java-Themen 3
M List casting error Allgemeine Java-Themen 3
F Java Error, bei Installation, Start und dem Control Panal Allgemeine Java-Themen 8
A ausführbare jar Error Allgemeine Java-Themen 2
F Error Logging - best practices? Allgemeine Java-Themen 3
P JDK installieren Error: Could not find or load main class HelloWorld.java Allgemeine Java-Themen 3
D Java error Allgemeine Java-Themen 2
J JVM Launcher Error Allgemeine Java-Themen 30
Jats Programm mit CMD Befehl hängt sich auf oder gibt error = 5 aus Allgemeine Java-Themen 4
I Java Ordner kopieren [Error] Allgemeine Java-Themen 6
G OutOfMemory Error bei Zahlenkonvertierungsprogramm Allgemeine Java-Themen 5
Jats ArrayList-Error Index: 1 Size:1 - Bitte um Hilfe Allgemeine Java-Themen 36
B Fatal error der JVM Allgemeine Java-Themen 9
N xml fatal error umgehen Allgemeine Java-Themen 14
M Webservice mit Axis2 und Eclipse - Error Allgemeine Java-Themen 2
S JNI - Fatal Error Allgemeine Java-Themen 2
D Java Heap error trotz anpassungen mit -xmx Allgemeine Java-Themen 4
R VM-Error - BadWindow (invalid Window parameter) Allgemeine Java-Themen 4
F Look And Feel Error Allgemeine Java-Themen 30
B Java OutOfMemory Error verhindern, Resourcenbedarf präventiv abschätzen? Allgemeine Java-Themen 19
X Error bei der Programmierung eines Sortieralgorithmus Allgemeine Java-Themen 2
B maven 2 error bei plugin download Allgemeine Java-Themen 7
hdi Heap Sapce Error bei sehr großem String Allgemeine Java-Themen 5
D Java Error / Fehler Allgemeine Java-Themen 2
A JNI unsatisfied linker error Allgemeine Java-Themen 2
R Syntax Error, der keiner sein sollte Allgemeine Java-Themen 12
S Error aus der Konsole auslesen Allgemeine Java-Themen 2
G Text aus Zwischenablage in JTextarea -> JDBC Error Allgemeine Java-Themen 3
A Synatx Error, wo gar keiner ist ? Allgemeine Java-Themen 2
T Syntax Error Allgemeine Java-Themen 9
B JMF Installations Error Allgemeine Java-Themen 2
O java StreamCorrupted Error beim Belegen einer JTextpane Allgemeine Java-Themen 5
R Speicherprobleme (OutOfMemory Error) Allgemeine Java-Themen 26
J Fatal Error Allgemeine Java-Themen 8
G Error: Hashtable Type safety: The method put(Object, Object) Allgemeine Java-Themen 6
J "Empty-String" Error Allgemeine Java-Themen 6
W Runtime Error216 Runtime error 217 Allgemeine Java-Themen 6
J Interpreteraufruf bring Error obwohl dies nicht sein dürfte. Allgemeine Java-Themen 24
G Error: java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 2
S Syntax Error, insert "AssignmentOperator Expression&amp Allgemeine Java-Themen 3
T Konsole "Fehlermeldung": error hereerror here Allgemeine Java-Themen 4
M typecast error Allgemeine Java-Themen 14
R Problemchen (unexpected error) Allgemeine Java-Themen 2
K error=2 (Datei nicht gefunden) - Datei ist aber da! Allgemeine Java-Themen 10
B unchecked cast Error Allgemeine Java-Themen 2
H java heap space (outofmemory error) Allgemeine Java-Themen 3
I Error: Unable to realize com.sun.media.amovie.AMController Allgemeine Java-Themen 3
M JButton verursacht einen HeapSpace Error? Allgemeine Java-Themen 6
B Syntax error on token ,VariableDeclaratorId expected after. Allgemeine Java-Themen 3
F Jar mit Abhängigkeiten ausführen -> NoClassDefFound Error Allgemeine Java-Themen 16
M strange error Allgemeine Java-Themen 3
S HTTPUnit Test Fehler: Error on HTTP request: 500 Internal Er Allgemeine Java-Themen 9
R .jar Executable - JVM Launcher: Fatal error Allgemeine Java-Themen 9
W Wie fange ich einen Error ab? Allgemeine Java-Themen 6
R Server Error 503 Allgemeine Java-Themen 4
D java.lang.error Allgemeine Java-Themen 2
J Jasper Report - seltame Meldung beim compilieren Allgemeine Java-Themen 3
geekex Problem Meldung! Was tun?! Allgemeine Java-Themen 19
C Hilfe bei einer Fehler meldung Allgemeine Java-Themen 3
N "Bitte warten"-Meldung Allgemeine Java-Themen 6
S Alert, meldung ausblenden Allgemeine Java-Themen 18
clupus Meldung an laufendes Java-Programm schicken - Wie? Allgemeine Java-Themen 6
K lästige Meldung Allgemeine Java-Themen 7
J Jena debug meldung Allgemeine Java-Themen 6
G fehler meldung beim starten einer .jar datei Allgemeine Java-Themen 3
L JTable: Wenn Zeile markiert dann Meldung. geht nicht Allgemeine Java-Themen 4
A Meldung: "Die Methode ist deprecated." Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben