Exception bei bei einer Instanz einer Methode

bspainkf36

Erfahrenes Mitglied
Hey Leute :)

ich habe drei Klassen Rechner ( extends JFrame) mit dieser Klasse stelle ich nur das Fenster dar. Mit einer Methode von Rechner erzeuge ich eine Instanz von der Klasse EinAddierer, welche mir die ganze Inhalt vom Fenster erzeugt (Buttons, Labels ...). Dann habe ich noch eine weiter Klasse für den MouseListener MouseAdapter. Diese Klasse wird vom EinAddierer instanziert. Wenn ich jetzt z.B. den Rechne Button betätige, soll der MouseListener für mich die Methode getSumme, zugehörig zu EinAddierer, ausführen. Dafür habe ich auch eine Instanz von EinAddierer in MouseAdapter erzeugt.

Code:
//Interface-Methode mouseClicken Klasse: MouseAdapter
 public void mouseClicked(MouseEvent me) {
   einAddierer2.getSumme();
  }

//Methode getSummer Klasse: EinAddierer
 public void getSumme(){
    double tempZahl=0;
    double zahl1 = Double.parseDouble(eingabe1.getText());
    double zahl2 = Double.parseDouble(eingabe2.getText());
    tempZahl = zahl1 + zahl2; 
    ergebnis.setText(String.valueOf(tempZahl));
  }

Eine Test-Methode, die z.B. etwas ausgibt(System.out...), kann ich von dem MouseListener aufrufen lassen, jedoch bekomm ich immer eine NullPointerException wenn ich getSummer aufrufe :(

Greetz kon
 
Hallo,

wenn deine NullpointerException in der Zeile auftritt, in der du die Methode getSumme-Methode aufrufst, dann muss das Objekt einAddierer2 null sein. Evtl stimmt da ja was mit der Initialisierung nicht. Gib einAddierer2 einfach mal aus, vor dem Methodenaufruf, dann kannst du sowas auch selbst testen.

Wenn deine NullpointerException innerhalb der Methode getSumme fällt, dann prüfe die Objekte, von denen Methoden aufgerufen werden in der Zeile, die in der Fehlermeldung ganz oben steht(ganz oben, aber noch deine Klasse, keine Klassen von denen du ableitest).

Grüsse TrueSun
 
hey,

ich versteh es einfach nicht warum immer wieder diese Exception auftacht ....

hier noch mal mein Aufbau:

- Rechner ( instanziert EinAddierer) //Erzeugt ein Fenster
- EinAddierer ( instanziert MyAdapert) //enthält den ganzen Inhalt vom Fenster
- MyAdapter ( instanziert EinAddierer) //enthält die Interface-Methode MouseClicked(); und führt dann einen Methode in EinAddierer aus.

Code:
package uebung4;
//import .... der ganzen Packages ..

class EinAddierer extends JPanel {
  JButton rechne;
  JTextField eingabe1;
  JTextField eingabe2;
  JLabel ergebnis;

  public EinAddierer (){
  }

  public void setFrameBody(){
   //erzeugen zwei Textfelder, fügen dieses zum ContentPane hinzu und setzen den
   //Layout-Manager
   eingabe1 = new JTextField("3", 1 );
   add(eingabe1);
   eingabe1.setBounds(15, 15, 30, 27);

   JLabel plus = new JLabel("+");
   add(plus);
   plus.setBounds(55,15,20,27);

   eingabe2 = new JTextField( "3", 1 );
   add(eingabe2);
   eingabe2.setBounds(75, 15, 30, 27);

   JLabel gleich = new JLabel("=");
   add(gleich);
   gleich.setBounds(110,15,20,27);

   ergebnis = new JLabel("");
   ergebnis.setBounds(125,15,30,27);
   add(ergebnis);

   setLayout(new BorderLayout());
   rechne = new JButton("Berechnen ...");
   setLayout(null);
   rechne.setBounds(15, 55, 140, 22);
   add(rechne);

   //Erzeugen ein Objekt von MyAdapter
   MyAdapter myAdapter1 = new MyAdapter();
   rechne.addMouseListener(myAdapter1);
 }

 public void setButtonBackround(int bgColor){
   //rechne.setBackground(new Color (bgColor, bgColor, bgColor));
   //add(rechne);
 }

  public void getSumme(){
    double zahl1=0;
    double zahl2=0;
    DecimalFormat df = new DecimalFormat("#,##0.0");
    
    try
    {
      zahl1 = Double.parseDouble(eingabe1.getText().replace(',','.'));
      zahl2 = Double.parseDouble(eingabe1.getText().replace(',','.')); 
      ergebnis.setText("Ergebnis: "+df.format(ergebnis));
    }
    catch(NumberFormatException error)
    {
      ergebnis.setText("Fehler bei Eingabefeld...");
    }
  }
}

Code:
package uebung4;

import java.awt.event.*;

public class MyAdapter extends MouseAdapter{
  EinAddierer einAddierer2 = new EinAddierer();

  public MyAdapter() {

  }

  public void mouseClicked(MouseEvent me) {
   einAddierer2.getSumme();
  }

  public void mouseEntered(MouseEvent me){
    einAddierer2.setButtonBackround(153);
  }

  public void mouseExid(MouseEvent me){
    einAddierer1.setButtonBackround(204);
  }
}

Sorry für den vielen Quellcode ... ich verzweifel :( Wenn ich jetzt den Bereche-Button drück, kommt eine NullPointException ... weiß jemand weiter? Hab ich vielleicht ein Fehler mit den Objekten gemacht? Danke für die Hilfe :)

Viele Grüße Kon
 
hey,

ich versteh es einfach nicht warum immer wieder diese Exception auftacht ....

hier noch mal mein Aufbau:

- Rechner ( instanziert EinAddierer) //Erzeugt ein Fenster
- EinAddierer ( instanziert MyAdapert) //enthält den ganzen Inhalt vom Fenster
- MyAdapter ( instanziert EinAddierer) //enthält die Interface-Methode MouseClicked(); und führt dann einen Methode in EinAddierer aus.

Code:
package uebung4;
//import .... der ganzen Packages ..

class EinAddierer extends JPanel {
  JButton rechne;
  JTextField eingabe1;
  JTextField eingabe2;
  JLabel ergebnis;

  public EinAddierer (){
  }

  public void setFrameBody(){
   //erzeugen zwei Textfelder, fügen dieses zum ContentPane hinzu und setzen den
   //Layout-Manager
   eingabe1 = new JTextField("3", 1 );
   add(eingabe1);
   eingabe1.setBounds(15, 15, 30, 27);

   JLabel plus = new JLabel("+");
   add(plus);
   plus.setBounds(55,15,20,27);

   eingabe2 = new JTextField( "3", 1 );
   add(eingabe2);
   eingabe2.setBounds(75, 15, 30, 27);

   JLabel gleich = new JLabel("=");
   add(gleich);
   gleich.setBounds(110,15,20,27);

   ergebnis = new JLabel("");
   ergebnis.setBounds(125,15,30,27);
   add(ergebnis);

   setLayout(new BorderLayout());
   rechne = new JButton("Berechnen ...");
   setLayout(null);
   rechne.setBounds(15, 55, 140, 22);
   add(rechne);

   //Erzeugen ein Objekt von MyAdapter
   MyAdapter myAdapter1 = new MyAdapter();
   rechne.addMouseListener(myAdapter1);
 }

 public void setButtonBackround(int bgColor){
   //rechne.setBackground(new Color (bgColor, bgColor, bgColor));
   //add(rechne);
 }

  public void getSumme(){
    double zahl1=0;
    double zahl2=0;
    DecimalFormat df = new DecimalFormat("#,##0.0");
    
    try
    {
      zahl1 = Double.parseDouble(eingabe1.getText().replace(',','.'));
      zahl2 = Double.parseDouble(eingabe1.getText().replace(',','.')); 
      ergebnis.setText("Ergebnis: "+df.format(ergebnis));
    }
    catch(NumberFormatException error)
    {
      ergebnis.setText("Fehler bei Eingabefeld...");
    }
  }
}

Code:
package uebung4;

import java.awt.event.*;

public class MyAdapter extends MouseAdapter{
  EinAddierer einAddierer2 = new EinAddierer();

  public MyAdapter() {

  }

  public void mouseClicked(MouseEvent me) {
   einAddierer2.getSumme();
  }

  public void mouseEntered(MouseEvent me){
    einAddierer2.setButtonBackround(153);
  }

  public void mouseExid(MouseEvent me){
    einAddierer1.setButtonBackround(204);
  }
}

Sorry für den vielen Quellcode ... ich verzweifel :( Wenn ich jetzt den Bereche-Button drück, kommt eine NullPointException ... weiß jemand weiter? Hab ich vielleicht ein Fehler mit den Objekten gemacht? Danke für die Hilfe :)

Viele Grüße Kon
 
Wie wäre es, wenn Du mal die Zeile
Code:
einAddierer1.setButtonBackround(204);

durch

Code:
einAddierer2.setButtonBackround(204);

ersetzt? ;)
 
Danke Snape, aber daran lag es nicht :) hab das Problem jetzt gelöst! Und zwar musste ich MyAdapter die Instanz von EinAddierer übergen und keine neue erzeugen!

Danke für die Hilfe

Greetz kon
 
Zurück