Fehlermeldung: java.lang.NullPointerException

Status
Nicht offen für weitere Antworten.

Swinnie17

Mitglied
Hi, bin ganz neu in Java, need help!

Mein Quellcode:

[Java]currentPost.edit()
import java.awt.*;
import java.awt.event.*;

/**
*
* Beschreibung
*
* @version 1.0 vom 16.10.2009
* @author
*/

public class GUIBurchrechner extends Frame {
// Anfang Attribute
private TextField textZaehler1 = new TextField();
private TextField textField1 = new TextField();
private TextField textZaehler2 = new TextField();
private TextField textNenner2 = new TextField();
private Button multiplizieren = new Button();
private Button addieren = new Button();
private Button subtrahieren = new Button();
private Button dividieren = new Button();
private Label Bruch1 = new Label();
private Label labelBruch2 = new Label();
private TextField textErg1 = new TextField();
private TextField textErg2 = new TextField();
private Label labelErgebnis = new Label();
private Bruchrechner Rechner = new Bruchrechner();
private Bruch B1, B2, BErg;
// Ende Attribute

public GUIBurchrechner(String title) {
// Frame-Initialisierung
super(title);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) { System.exit(0); }
});
int frameWidth = 284;
int frameHeight = 276;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
Panel cp = new Panel(null);
add(cp);
// Anfang Komponenten

textZaehler1.setBounds(48, 48, 25, 24);
textZaehler1.setText("");
cp.add(textZaehler1);
textField1.setBounds(48, 80, 25, 24);
textField1.setText("");
cp.add(textField1);
textZaehler2.setBounds(104, 48, 25, 24);
textZaehler2.setText("");
cp.add(textZaehler2);
textNenner2.setBounds(104, 80, 25, 24);
textNenner2.setText("");
cp.add(textNenner2);
multiplizieren.setBounds(24, 152, 97, 25);
multiplizieren.setLabel("multiplizieren");
multiplizieren.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
multiplizieren_ActionPerformed(evt);
}
});
cp.add(multiplizieren);
addieren.setBounds(24, 192, 97, 25);
addieren.setLabel("addieren");
addieren.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
addieren_ActionPerformed(evt);
}
});
cp.add(addieren);
subtrahieren.setBounds(144, 152, 89, 25);
subtrahieren.setLabel("subtrahieren");
subtrahieren.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
subtrahieren_ActionPerformed(evt);
}
});
cp.add(subtrahieren);
dividieren.setBounds(144, 192, 89, 25);
dividieren.setLabel("dividieren");
dividieren.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
dividieren_ActionPerformed(evt);
}
});
cp.add(dividieren);
Bruch1.setBounds(40, 24, 44, 16);
Bruch1.setText("Bruch 1");
Bruch1.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(Bruch1);
labelBruch2.setBounds(96, 24, 52, 16);
labelBruch2.setText("Bruch 2");
labelBruch2.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(labelBruch2);
textErg1.setBounds(200, 48, 25, 24);
textErg1.setText("");
cp.add(textErg1);
textErg2.setBounds(200, 80, 25, 24);
textErg2.setText("");
cp.add(textErg2);
labelErgebnis.setBounds(184, 24, 54, 16);
labelErgebnis.setText("Ergebnis");
labelErgebnis.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(labelErgebnis);
// Ende Komponenten

setResizable(false);
setVisible(true);
}

// Anfang Methoden
public void multiplizieren_ActionPerformed(ActionEvent evt) {
B1.setBruch(textZaehler1.getText(),textField1.getText());
B2.setBruch(textZaehler2.getText(),textNenner2.getText());
Rechner.Multiplikation(B1,B2);
BErg=new Bruch();
BErg=Rechner.getBruch();
textErg1.setText(""+BErg.Z);
textErg2.setText(""+BErg.N);
}

public void addieren_ActionPerformed(ActionEvent evt) {
B1.setBruch(textZaehler1.getText(),textField1.getText());
B2.setBruch(textZaehler2.getText(),textNenner2.getText());
Rechner.Addition(B1,B2);
BErg=Rechner.getBruch();
textErg1.setText(""+BErg.Z);
textErg2.setText(""+BErg.N);
}

public void subtrahieren_ActionPerformed(ActionEvent evt) {
B1.setBruch(textZaehler1.getText(),textField1.getText());
B2.setBruch(textZaehler2.getText(),textNenner2.getText());
Rechner.Subtraktion(B1,B2);
BErg=Rechner.getBruch();
textErg1.setText(""+BErg.Z);
textErg2.setText(""+BErg.N);
}

public void dividieren_ActionPerformed(ActionEvent evt) {
B1.setBruch(textZaehler1.getText(),textField1.getText());
B2.setBruch(textZaehler2.getText(),textNenner2.getText());
Rechner.Division(B1,B2);
BErg=Rechner.getBruch();
textErg1.setText(""+BErg.Z);
textErg2.setText(""+BErg.N);
}

// Ende Methoden

public static void main(String[] args) {
new GUIBurchrechner("GUIBurchrechner");
}
}
[/Java]


Ich erhalte folgende Fehlermeldung:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at GUIBurchrechner.addieren_ActionPerformed(GUIBurchrechner.java:127)
at GUIBurchrechner$3.actionPerformed(GUIBurchrechner.java:72)
at java.awt.Button.processActionEvent(Button.java:392)
at java.awt.Button.processEvent(Button.java:360)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

:shock:

Was will mir diese Fehlermeldung sagen?
 
Zuletzt bearbeitet von einem Moderator:
Dass du auf eine Variable zugreifst die null ist, also kein Objekt da ist. Und das ganze in der Zeile 127.

-> B1, B2 und BErg tust du nirgends initialisieren.
 
Klar mit nem Editor, womit sonst? ABer das ist doch egal.

Du solltest eigentlichtlich wissen was null bedeutet und wie Variablen und Objekte funktionieren -> Grundlagen.
Tutorials gibts genug im Internet. Ein Hinweis hab ich oben noch in meinen ersten Post reineditiert: B1, B2 und BErg sind null da du ihnen nie einen anderen Wert zuweist.
 
Ich definiere die Werte in einer separaten Datei:

[Java]
import java.util.*;

public class Bruch {

// Anfang Attribute
public int N;
public int Z;
// Ende Attribute



// Anfang Methoden
public void setBruch(String Zaehler, String Nenner) {
Z = Integer.parseInt(Zaehler);
N = Integer.parseInt(Nenner);
}
public void setBruch(int Zaehler, int Nenner) {
Z = (Zaehler);
N = (Nenner);
}
// Ende Methoden
}
[/Java] :autsch:
 
Der Rechner ist auch eine separate Datei:

[Java]
import java.util.*;

public class Bruchrechner {


// Anfang Attribute
private Bruch BErg = new Bruch();
// Ende Attribute


/********* Addition (public) *******************************************/

// Anfang Methoden
public void Addition(Bruch B1, Bruch B2){
BErg.setBruch(B1.Z*B2.N+B2.Z*B1.N,B1.N*B2.N);
}

public void Subtraktion(Bruch B1, Bruch B2){
BErg.setBruch(B1.Z*B2.N-B2.Z*B1.N,B1.N*B2.N);
}

public void Division(Bruch B1, Bruch B2){
BErg.setBruch(B1.Z*B2.N,B1.N*B2.Z);
}

public void Multiplikation(Bruch B1, Bruch B2){
BErg.setBruch(B1.Z*B2.Z,B1.N*B2.N);
}

public Bruch getBruch(){
return BErg;
}
private Bruch kuerzen(Bruch B){
int g = ggt(B);
B.Z = (int) (B.Z / g);
B.N = (int) (B.N / g);
return B;
}
private int ggt(Bruch B) {
int r=1;
int a = B.Z;
int b = B.N;
while ( r!=0 ) {
r = a % b;
a = b;
b = r;
}
return a;
}
// Ende Methoden
}


[/Java]
 
Und? Deshalb wird trotzdem nirgendwo B1, B2, oder BErg ein Wert (Object) zugewiesen. Die sind null. Darum schepperts dann wenn du B1.setBruch aufrufst.
 
Du musst B1 mit dem 'new'-Operator erzeugen. Sonst ist das Objekt 'null'. ('null' ist nicht das gleiche wie 0. 'null' kommt aus dem englischen und bedeutet so viel wie 'leer').

z.B.
[Java]
Bruch B1 = new Bruch();
[/code]

Unbedingt die Theorie dazu anschauen. Das ist etwas von den wichtigsten Grundlagen bei OOP.

PS:
Variablen und Objekte schreibt man im 'camelCase'. (der Anfang ist klein)

*Edit:
Und bei den anderen Objekten, die auch 'null' sind, natürlich auch wie bei B1 mit new erzeugen.
 
@icarus2
Vielen Dank, wenigstens einer der sich herablässt meine "blöde Frage" zu beantworten.

Ich lerne Java in der Schule, kann auch nix dafür wenn der Unterricht da schlecht aufgebaut ist. Und den Fehler in dem Code hat nicht mal mein Lehrer gefunden ...
 
Ich hab vor einem Jahr genauso angefangen ;-)

Habe mich einfach in der Frezeit intensiv damit beschäftigt und jetzt bin ich am 2D-Spiele programmieren. Das wird schon wenn man sich ranhält =)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben