Hallo Leute, Ich bin gerade dabei mir das Programmieren mit Java beizubringen. Ich bekomme eine Exception und verstehe sie nicht ganz kann. Bitte um Hilfe?

3 Antworten

Eine "NullPointerException" tritt im Normalfall dann auf, wenn du irgendwo eine Variable falsch deklariert hast, bzw. diese nicht richtig initialisiert wurde.... Der Computer versucht also auf eine Stelle im Speicher zurückzugreifen, wo bisher noch gar nichts ist.

Gut wäre es, wenn man jetzt den Code kennen würde, und wissen würde, an welcher Stelle des Codes der Fehler auftritt.

Habe den Code in einer Antwort hinzugefügt, habe ich beim erstellen der Frage vergessen. Danke für den Hinweis

0

Warum baust du dir selbst ein dynamisches Array und benutzt nicht einfach ne ArrayList?

Ansonsten müsste man wohl gucken, was genau du tust (Quellcode) um mehr dazu zu sagen, warum genau der Fehler auftritt.

Zu der Exception selbst n bissl Lesematerial:

https://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException.html

https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it

Danke für das Lesematerial :D

Habe den Code in einer Antwort hinzugefügt, habe ich beim erstellen der Frage vergessen. Danke für den Hinweis

0

Hab gesehen, dass der Code Hier doch ganz reinpasst daher hier der gesamte Code:

Klasse : Layout

package Randomgame;

import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Scanner;
public class Layout extends JFrame {
public String[] spielliste ;
public int i,x,anz;
public Scanner s = new Scanner(System.in);

public Layout() {
setTitle("Zufallsspiel");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setLayout(new BorderLayout());
JLabel titleLable = new JLabel("Passwort - Fenster");
titleLable.setHorizontalAlignment(JLabel.CENTER);
titleLable.setBorder(BorderFactory.createEmptyBorder(100, 0, 100, 0));

//headPanel
JPanel headPanel = new JPanel();
JLabel wortl = new JLabel("Zufallsspiel");
headPanel.add(wortl);

//mainPanel
JPanel mainPanel = new JPanel();
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();

//listePanel
JPanel listePanel = new JPanel();
JTextArea ta2 = new JTextArea("Hier befindet sich die Liste der eingetragenen Spiele");
listePanel.add(ta2);

//ausgabePanel
JPanel ausgabePanel = new JPanel();
JTextArea ta1 = new JTextArea("Hier befindet sich die Ausgabe");
ausgabePanel.add(ta1);

mainPanel.setLayout(new GridLayout(4, 1));
mainPanel.add(ausgabePanel);
mainPanel.add(p1);
mainPanel.add(p2);
mainPanel.add(listePanel);

JTextField tf1 = new JTextField(17);

JButton okButton1 = new JButton("Ok1");
p1.add(tf1);
p1.add(okButton1);

JTextField tf2 = new JTextField(17);
JButton okButton2 = new JButton("Ok2");
p2.add(tf2);
p2.add(okButton2);
        //buttonPanel
JPanel buttonPanel = new JPanel();
JButton closeButton = new JButton("Beenden");
JButton würfleButton = new JButton("Würfle");
JButton löschenButton = new JButton("Löschen");
JButton zeigeButton = new JButton("Zeige Liste");
buttonPanel.add(löschenButton);
buttonPanel.add(zeigeButton);
buttonPanel.add(würfleButton);
buttonPanel.add(closeButton);

//Top - LevelLayout
add(headPanel, BorderLayout.NORTH);
add(mainPanel, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.SOUTH);
pack();

//Controller

Controller c = new Controller();
closeButton.addActionListener(c);

class Loesch implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
ta1.setText("");
ta2.setText("");
}
}
Loesch l = new Loesch();
löschenButton.addActionListener(l);

class Eintrag implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
anz = Integer.valueOf(tf1.getText());
anz = spielliste.length;

}
}
Eintrag e = new Eintrag();
okButton1.addActionListener(e);

class Eintragi implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
for (i = 0; i <= spielliste.length; i++) {
spielliste[i]=s.nextLine();

}
}
}
Eintragi ei = new Eintragi();
okButton1.addActionListener(ei);

class Ausgabel implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
for (x=0;x<=anz;x++) {
ta2.setText(spielliste[x]);
}
}
}
Ausgabel al = new Ausgabel();
zeigeButton.addActionListener(al);
}
}

war mit auch nicht ganz sicher wie ich die klassen arrangiere, bzw wo die hinmüssen, damit das ganze funktioniert un die Variablen erkennt :D

Klasse: Controller

package Randomgame;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Controller implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}

Klasse: MLauncher

package Randomgame;

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

}
}



Tu mir mal n Gefallen und poste den Krams z.B. bei https://pastebin.com/

Zudem könnteste dazu auch gleich die Fehlermeldung posten (also was genau und in welcher Zeile sollte die IDE eig. angeben).

0
@Etter

werde es dort wahrscheinlich auch bald posten, hab die Exception jetzt aber erstmal in ein Kommentar unter den Code gepackt

0

Die Exception:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Randomgame.Layout$1Eintragi.actionPerformed(Layout.java:106)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6535)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6300)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4891)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2750)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

0

Okay ich hab da meine Vermutung. Ist es richtig, dass die ganzen Klassen in Layout.java liegen? Wenn ja dann lager erstmal jede Klasse in ne eigene Java-Datei aus.

Zeile 106 "spielliste" zu. Diese wird vmtl. in der Klasse "Eintragi" nicht bekannt sein, also musst du da anders drauf verweisen.

Eine Option wäre eine statische Klasse mit Holderfunktionalität (hält alle Instanzklassen bereit z.B. per Getter). Dann könnteste auf die Holderklasse die Instanzklasse holen und dann per Getter die Spielliste abgreifen.

0
@Etter

Also ja, es liegen alle Klassen, bis auf Controller und MLauncher in Layout. Als ich begonnen habe die einzelnen Klassen zu schreiben, habe ich mit der Loesch-Klasse begonnen und festgestellt, dass dann die JTextArea´s, die gelöscht werden sollen nicht erkannt werden, bzw die anderen Variabeln der anderen Klassen nicht erkannt werden, obwohl sie als public deklariert sind. Wie kann ich dann die anderen Klassen, die ich mittlerweile in einzelne Java-Dateien gepackt habe, die Variablen und Felder aus Layout erkennen lassen ? Kann ich das mit Vererbung machen oder wie funktioniert das ?
  

0

Wer kann mir sagen woran das liegt, es geht um Java (Textfield)?

Hey, ich habe ein Problem mit einem JTextfield. Es wird mit erst angezeigt nachdem ich einmal mit der Maus in das Textfeld geklickt habe. Damit meine ich, das es garnicht zu sehen ist solange ich nicht auf sie Stelle geklickt habe an der das Feld ist. Mein Code:

    setVisible(true);
    setSize(500, 500);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(false);
    setLayout(null);
    eingabe = new JTextField();
    eingabe.setBounds(300, 100, 150, 50);
    add(eingabe);
...zur Frage

Java: Array soll eingegebene Parameter rückwärts zurückgeben

Hallo zusammen,

könnte ihr mir helfen, solchen Programm zu schreiben?:

Gesucht ist ein Programm, dass alle übergebenen Parameter in umgekehrter Reihenfolge ausgibt. (Die Länge eines Arrays steht automatisch im Attribut length des Arrays.)

Vielen Dank

...zur Frage

Desktop-Anwendungen mit Kotlin erstellen?

Hallo,

kann mir jemand kurz & knapp was zum Thema Kotlin und Desktop-Anwendungen sagen? Ich habe keinerlei Erfahrung mit Kotlin, bin daher fast völlig ahnungslos. Ist Kotlin dafür gedacht, klassische Desktop-Anwendungen für Windows / Linux / MacOS zu erstellen? Oder ist das eher so ein "möglich aber nicht der pirmäre Zweck" wie bei Node.js, das erst mit entsprechenden Frameworks / Browsern wie bei Electron Deskto-Anwendungen unterstützt?

(Ich weiß von dem Android-Support aber der ist für mich nicht von Interesse.)

...zur Frage

IntelliJ Java Datenspeicherung geht nach Umwandlung in jar nicht mehr?

Hallo, ich habe ein kleines Programm mit Java in IntelliJ geschrieben. Ich habe dort eine TableView in die man Daten eintragen kann welche dann automatisch in eine csv datei geschrieben werden. Beim erneuten öffnen des Programms werden die Daten dann aus der csv datei gelesen und wieder angezeigt. Das hat alles soweit funktioniert. Jetzt habe ich aus dem Projekt eine Jar Datei gemacht und die Datenspeicherung funktioniert nicht mehr. Alles andere geht noch so wie es soll. Danke im voraus ;)

...zur Frage

Java Array einlesen.

Hallo ich fange neu mit Java an und habe folgendes Problem:

Ich möchte einen Array von 15 er Länge einlesen und hab volgendes bereits geschrieben :


import java.util.Scanner;

public class Aufgabe2 {

public static Scanner in;

public static void main (String[] args) { int a[] = new int[15];

/* Einlesen eines 15'er Array's */

for (int i = 0; i < 15; i++){ a[i] = in.nextInt(); }

/* Ausgabe */

for (int i = 0; i < 15; i++){ System.out.printf("%d", a[i]); }

} }


Nun bekomme ich aber immer folgeden Fehlermeldung:

Exception in thread "main" java.lang.NullPointerException

woran liegt das was hab ich falsch gemacht?

Danke schonmal für eure Hilfe.

GLG Ede

...zur Frage

Java Editor - Array mit Zufallszahlen füllen

Hallo alle miteinander!

Und zwar möchte ich im Java Editor ein Array mit Zufallszahlen per Knopfdruck (im Frame) füllen. Wie muss ich da vorgehen? Was muss deklariert werden und was muss im button stehen?

...zur Frage

Was möchtest Du wissen?