NullPointerException

huhu…

habe ein problem mit java… ich bekomme immer eine nullpointerexception.
weiss mir keinen rat mehr, dehalb wende ich mich mal an euch…
bitte versucht zu helfen.
ich versuche eine class namens daten, die aus zwei strings und vier vectoren besteht, in einen vector zu schreiben. dabei bekomm ich immer diese exception, die textfield sind nicht leer.
kann man vieleicht vectoren nicht so füllen(über eine klasse)?
sorry wenn der fehler vielleicht sehr dumm ist, bin noch anfänger…

String cmg = e.getActionCommand();
if (cmg.equals(„Einfügen“))
{
try
{
Daten dat= new Daten();
dat.scheinnr=scheinnr.getText();
dat.spiel =spiel.getText();
for (int a=1;a

Hallo,

Java zählt von 0 ab.

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Java zählt von 0 ab.

Gruß

Peter

Hi Peter…

Ja ist mir bekannt, danke… das TextField [0] ist im JPanel gesetzt, ist aber nicht abgefragt und wird auch nicht beschrieben… Ist nur für mich da, soweit unwichtig… Da nicht das ganze TextField Array gespeichert wird, kann ich auch felder auslassen, oder?
Kann mir nicht vorstellen das es daran liegt dass ich Array[0] nicht beachte…
Hab hier nochmal zur Sicherheit die ganze Hauptklasse reingesetzt… Ist allerdings noch lange nicht vollständig.

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.io.*;

public class Menue extends JFrame implements ActionListener
{

static Vector scheine;
Container con;
int zeiger=0;
Daten dat;
final String FILENAME=„c:\Glueckbingo.ser“;
JPanel jp1,jp2;
JPanel[] panel={ jp1= new JPanel(),
jp2= new JPanel()};

JMenuBar menuBar = new JMenuBar();
JMenu menuDatei = new JMenu();
JMenuItem menuDateiOffen= new JMenuItem();
JMenuItem menuDateiSpeich= new JMenuItem();
JMenuItem menuDateiExit = new JMenuItem();

JButton b1= new JButton("->");
JButton b2= new JButton("=zeiger)
{
Daten dat=(Daten)scheine.elementAt(zeiger);
if (dat.spiel.equals(spiel.getText()))
{
int a=0;
for (Enumeration tau=dat.tausend.elements();tau.hasMoreElements():wink:
{
System.out.println(""+tau.nextElement());
a++;
}
for (Enumeration jo=dat.jocker.elements();jo.hasMoreElements():wink:
{
System.out.println(""+jo.nextElement());
a++;
}
for (Enumeration zw=dat.zwanzig.elements();zw.hasMoreElements():wink:
{
System.out.println(""+zw.nextElement());
a++;
}
for (Enumeration fu=dat.fuenfzig.elements();fu.hasMoreElements():wink:
{
System.out.println(""+fu.nextElement());
a++;
}
zeiger++;

}else
{
zeiger++;
}
}
}
else if (cmg.equals("->"))
{
if(scheine.size()-1>=zeiger)
{
Daten dat=(Daten)scheine.elementAt(zeiger);
if (dat.spiel.equals(spiel.getText()))
{
int a=0;
for (Enumeration tau=dat.tausend.elements();tau.hasMoreElements():wink:
{
atext[a].setText(""+tau.nextElement());
a++;
}
for (Enumeration jo=dat.jocker.elements();jo.hasMoreElements():wink:
{
atext[a].setText(""+jo.nextElement());
a++;
}
for (Enumeration zw=dat.zwanzig.elements();zw.hasMoreElements():wink:
{
atext[a].setText(""+zw.nextElement());
a++;
}
for (Enumeration fu=dat.fuenfzig.elements();fu.hasMoreElements():wink:
{
atext[a].setText(""+fu.nextElement());
a++;
}
zeiger++;

}else
{
zeiger++;
}
}
}
else if (cmg.equals(„HD-Öffnen“))
{
/* try
{
FileInputStream file= new FileInputStream(FILENAME);
ObjectInputStream ob= new ObjectInputStream(file);
scheine.removeAllElements();
scheine.addElements(ob.readObject());
}
catch (IOException ioe)
{
System.out.println(ioe);
}*/
}
else if (cmg.equals(„HD-Speichern“))
{
try
{
FileOutputStream file= new FileOutputStream(FILENAME);
ObjectOutputStream ob= new ObjectOutputStream(file);
ob.writeObject(scheine);
ob.close();
}
catch (IOException ioe)
{
System.out.println(ioe);
}
}
else if (cmg.equals(„Exit“))
{
System.exit(0);
}

}
public void loeschen()
{
for (int a=1;a

Ändere mal bitte in

catch (NullPointerException npe) {
npe.printStackTrace();
}

Und gib uns mal das Ergebnis. Daran siehtst du genau wo die Exception herkommt.

Micha

Nochwas
Ich habe aber ne Vermutung, gib mal bitte noch die Klasse Daten (zumindest aber mal die Variablendefinitionen und den Konstruktor) durch.

Übrigends, direkter Zugriff auf Variablen macht man nicht (dat.tausend. …) sauberer wäre dat.getTausend().machwas
oder gleich ne Mthode die das intern regelt.

Daher meine Vermutung der Exception, ich vermute „tausend“ ist noch null und du rufst add()

Micha, der nicht gefunden hat dass man editieren kann

hier die class daten:

import java.util.*;

public class Daten
{
String scheinnr,spiel;
static Vector tausend,jocker,zwanzig,fuenfzig;
}

und die fehlerausgabe:

java.lang.NullPointerException
at Menue.actionPerformed(Menue.java:103)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

wie geschrieben bin ich anfänger und kann irgendwie nicht viel mit der fehlerausgabe anfangen, sorry…
entschuldige bitte auch die etwas konfuse programmierung… okok, zusammenschusterung :smile:)

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

ja sehe ich ein… indirekter variablen zugriff… hmmm, ok…
hatte vor einiger zeit schon mal ein kleines prog. geschrieben zur adressen speicherung… da hatte ich es genauso gemacht (vom code her), nur der einzige unterschied war dass ich in der class daten keine vectoren genommen hatte, sondern nur string varis…
brauche hier aber vectoren, weil ich gern 9-10 zahlen pro vector speichern möchte. könnte es auch über eine mysql datenbang anbindung regeln. nur kenne ich mich da nicht so toll aus und halte ich in diesem fall für übertrieben da das prog. nur für mich sein soll… laufzeit und datenvolumen sind egal…
danke dir für deine hilfe :smile:
andy

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

moin moin…

habe mal die class daten umgestellt. alle vectoren raus und dafür string-arrays rein.
nun klappt das reinschreiben in die „daten-struktur“, bekomme aber nun diesen nullpointerexception beim reinschreiben der class daten in den vector scheine „scheine.add(dat);“…
verstehe das alles nicht, was mach ich denn nur für einen gedanklichen fehler?
achja, hab auch alle zähler und so bei 0 beginnen lassen, was (ich weiss es ja) bei java üblich ist…

moin moin…
verstehe das alles nicht, was mach ich denn nur für einen
gedanklichen fehler?

Die Vektoren sind alle null. Ein Zugriff auf Methoden eines
nicht initialisierten Objektes fuehrt zu einer NPE.
Du musst die Vektoren erstmal initialisieren, z.B. im Konstruktor
der Klasse Daten.

public class Daten {
 private Vector vec;

 public Daten() {
 vec = new Vector();
 }
}

Gruss, Patrick

Hi,

wie von PatrickEins schon bemerkt und von mir vermutet sind die Vectoren noch null. Ich versuchs mal mit Erklärung:

public class Daten
{
String scheinnr,spiel;
static Vector tausend,jocker,zwanzig,fuenfzig;
}

Frage: Warum sind die Vectoren static? Auf jeden Fall sind sie so noch null. Also am besten hier oben:

private Vector tausend = new Vector();
private Vector jocker = new Vector();
...

oder eben im Konstruktor der Klasse initialisieren.

public Daten(){
 tausend = new Vector();
}

Kommen wir mal zum Stacktrace:

java.lang.NullPointerException
at Menue.actionPerformed(Menue.java:103)

Was ist es? Eine NPE. Wo kommt sie her? Aus deiner Klasse Menue, Zeile 103.

Der Rest sind Java-interne Klassen. Nun cshaust du in die Klasse auf Zeile 109 und suchst dort alles was null sein könnte. Und in deinem Fall ist das wohl der Vector tausend.

entschuldige bitte auch die etwas konfuse programmierung…
okok, zusammenschusterung :smile:)

Kein Thema, 2 Tipps noch:

  • Klammern setzt man in Java üblicherweise hinten hin, siehe auch meine Codeschnipsel. Machts für andere Java-Entwickler einfacher.
  • Wie schon geschrieben kein direkter Zugriff. Heutzutage gibts IDEs die dir die Arbeit der getter und setter abnehmen. (z.B. Eclipse, NetBeans, JBuilder, …) Da schreibt man einfach die privaten variablen und lässt sich setXXX und getXXX generieren. Damit gibts auch keine „Ausreden“ mehr von wegen „nur mal schnell“, „kleine Klasse“, „viel AUfwand“

Viel Erfolg noch

Michael

Herzlichen Dank an euch für die nette Hilfe, es Funkt…

Wünsche euch alles gute für das neue Jahr…

liebe Grüße von andy