Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

123markus123

Mitglied
Ich möchte einen Übersetzter programmieren, der z.B. deutsche in englische wörter übersetzt. Dazu habe ich folgende Quelltexte geschrieben:


Java:
package übersetzer;

public class Übersetzer {

 
    public static void main(String[] args) {
        ÜbersetzerFrame übersetzer = new ÜbersetzerFrame();
    }
}

Der Frame und der ActionListener des Buttons:

Java:
package übersetzer;

import java.awt.*;
import java.awt.event.*;

public class ÜbersetzerFrame extends Frame {

    private Label überschrift;
    private Label ausgabe;
    private TextField eingabe;
    private Button bestätigen;
    private String text;
    private Translator translator;

    ÜbersetzerFrame() {
        super("ÜbersetzerFrame");

        this.setLayout(null);

        überschrift = new Label("Geben sie hier den Text ein:");
        ausgabe = new Label();
        eingabe = new TextField();
        bestätigen = new Button("OK");

        this.add(überschrift, null);
        this.add(eingabe, null);
        this.add(ausgabe, null);
        this.add(bestätigen, null);

        überschrift.setBounds(20, 40, 200, 20);
        eingabe.setBounds(20, 70, 1400, 20);
        bestätigen.setBounds(70, 100, 50, 20);
        ausgabe.setBounds(20, 130, 1400, 20);

        bestätigen.addActionListener(new MyListener());

        this.setSize(1440, 300);
        this.setVisible(true);

    }

    public void setAusgabe(Label ausgabe) {
        this.ausgabe = ausgabe;
    }


    public TextField getEingabe() {
        return eingabe;
    }


    public Label getAusgabe() {
        return ausgabe;
    }


    public void setEingabe(TextField eingabe) {
        this.eingabe = eingabe;
    }

    class MyListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {

            if (e.getSource() == bestätigen) {

                text = getEingabe().getText();
                getAusgabe().setText(translator.übersetze(text));

            }
        }
    }
}

Der Übersetzer:

Java:
package übersetzer;

import java.io.*;
import java.util.*;
import java.util.logging.*;

public class Translator {

    private String suchwort;

    public Translator() {
    }

    public String übersetze(String suchworte) {

        this.suchwort = suchwort;
        
        System.out.println("übersetze");

        String ausgabe = suchwort;
        try {
            BufferedReader reader = new BufferedReader(new FileReader("C:\\Users\\Markus\\Documents\\NetBeansProjects\\Übersetzer\\src\\übersetzer\\Wörterbuch.dat"));
            try {
                while ((suchwort = reader.readLine()) != null) {
                    StringTokenizer tokenizer = new StringTokenizer(suchwort, " ");
                    if (tokenizer.nextToken() == suchwort) {
                        ausgabe = tokenizer.nextToken();
                    }

                }
            } catch (IOException ex) {
                Logger.getLogger(Translator.class.getName()).log(Level.SEVERE, null, ex);
            }


        } catch (FileNotFoundException ex) {
            Logger.getLogger(Translator.class.getName()).log(Level.SEVERE, null, ex);
        }

        return ausgabe;


    }
}

Die Wörter sind in der Datei Wörterbuch.dat:
gehen go
spielen play
rennen run

Wenn ich das Programm starte, etwas in dem Textfeld eingebe und auf den Button klicke kommt diese Fehlermeldung:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at übersetzer.ÜbersetzerFrame$MyListener.actionPerformed(ÜbersetzerFrame.java:86)
at java.awt.Button.processActionEvent(Button.java:409)
at java.awt.Button.processEvent(Button.java:377)
at java.awt.Component.dispatchEventImpl(Component.java:4860)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)


Ich hoffe ihr wisst, wie ich das Problem lösen kann, ich kann Java noch nicht so gut.
 
Java:
getAusgabe().setText(translator.übersetze(text));

Code:
translator
ist null, da du kein Objekt davon erstellst hast.
 
Wir denn bei
Java:
private Translator translator;
kein Objekt erstellt?

Nein, das ist eine Referenz die auf
Code:
null
zeigt.

Ein Objekt erstellst du mit dem
Code:
new
Operator, z.B:

Java:
überschrift = new Label("Geben sie hier den Text ein:");
 
Jein, erstellt wird es erst, wenn du sowas schreibst wie
Code:
translator = new Translator();
, also der Konstruktor aufgerufen wird. Sonst das ist ganz eben leer ;-)
 

Zurück
Oben