Guten Morgen zusammen, heute ist wieder ein wunderbarer Tag, zumindest bei uns. 
Wie dem auch sei. Ich übe gerade mit Java :rtfm: und möchte als Übung ein Editor (Textverarbeitung) programmieren. Soweit so gut, bis hin auf, dass ich für das Menüpunkt "Datei öffnen ..." die Funktion geschrieben habe, immer eine Fehlermeldung im Terminal erscheint, die folgendermaßen lautet:
Dies erscheint erst wenn ich die Funktion im Programm aufrufe.
Hier ist mein Quellcode:
Ich kann leider die Fehlermeldung nicht entschlüsseln.
PS: Ich habe kein Präfix ausgewählt, da ich nicht wusste ob es ein Compiler- oder Interpreter-Fehler ist.
Wie dem auch sei. Ich übe gerade mit Java :rtfm: und möchte als Übung ein Editor (Textverarbeitung) programmieren. Soweit so gut, bis hin auf, dass ich für das Menüpunkt "Datei öffnen ..." die Funktion geschrieben habe, immer eine Fehlermeldung im Terminal erscheint, die folgendermaßen lautet:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.io.FileInputStream.<init>(FileInputStream.java:134)
at java.io.FileInputStream.<init>(FileInputStream.java:97)
at java.io.FileReader.<init>(FileReader.java:58)
at GUI.ladeDatei(GUI.java:93)
at GUI.actionPerformed(GUI.java:67)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3312)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4687)
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)
Dies erscheint erst wenn ich die Funktion im Programm aufrufe.
Hier ist mein Quellcode:
Java:
public class Main {
public static void main(String[] args) {
GUI fenster = new GUI("Editor");
fenster.setSize(300, 300);
fenster.setVisible(true);
}
}
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.filechooser.*;
import java.io.*;
class GUI extends JFrame implements ActionListener {
JMenuBar menuBar;
JMenu menuDatei, menuBearbeiten, menuInfo;
JMenuItem itemDateiOeffnen, itemDateiSpeichern, itemDateiBeenden;
JMenuItem itemBearbeitenKopieren, itemBearbeitenAusschneiden, itemBearbeitenEinfuegen;
JMenuItem itemInfoUeber;
JTextArea textfeld;
String dateiname;
GUI(String titel) {
super(titel);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// Menüleiste hinzufügen
menuBar = new JMenuBar();
setJMenuBar(menuBar);
// Menüeinträge zur Menüleiste hinzufügen
menuDatei = new JMenu("Datei");
menuBearbeiten = new JMenu("Bearbeiten");
menuInfo = new JMenu("Info");
menuBar.add(menuDatei);
menuBar.add(menuBearbeiten);
menuBar.add(menuInfo);
// Items zu den Menüeinträgen hinzufügen
itemDateiOeffnen = new JMenuItem("Datei öffnen ...");
itemDateiSpeichern = new JMenuItem("Datei speichern ...");
itemDateiBeenden = new JMenuItem("Beenden");
itemBearbeitenKopieren = new JMenuItem("Kopieren");
itemBearbeitenAusschneiden = new JMenuItem("Ausschneiden");
itemBearbeitenEinfuegen = new JMenuItem("Einfügen");
itemInfoUeber = new JMenuItem("Über ...");
menuDatei.add(itemDateiOeffnen);
menuDatei.add(itemDateiSpeichern);
menuDatei.add(itemDateiBeenden);
menuBearbeiten.add(itemBearbeitenKopieren);
menuBearbeiten.add(itemBearbeitenAusschneiden);
menuBearbeiten.add(itemBearbeitenEinfuegen);
menuInfo.add(itemInfoUeber);
// Items bei Listener anmelden
itemDateiOeffnen.addActionListener(this);
itemDateiBeenden.addActionListener(this);
itemBearbeitenKopieren.addActionListener(this);
itemBearbeitenAusschneiden.addActionListener(this);
itemBearbeitenEinfuegen.addActionListener(this);
itemInfoUeber.addActionListener(this);
// Textfeld
textfeld = new JTextArea(500, 100);
JScrollPane scrollpane = new JScrollPane(textfeld);
add(scrollpane);
}
public void actionPerformed(ActionEvent e) {
Object o = e.getSource();
if (o == itemDateiOeffnen)
ladeDatei();
if (o == itemDateiBeenden)
System.exit(0);
if (o == itemBearbeitenKopieren)
textfeld.copy();
if (o == itemBearbeitenAusschneiden)
textfeld.cut();
if (o == itemBearbeitenEinfuegen)
textfeld.paste();
if (o == itemInfoUeber)
JOptionPane.showMessageDialog(this, "Name\nCopyright (r) 2012");
}
void ladeDatei() {
// Dialog erstellen
JFileChooser fileDialog = new JFileChooser();
// Typ des Dialogs defenieren
fileDialog.setDialogType(JFileChooser.OPEN_DIALOG);
// Neuen Filter erstellen
FileNameExtensionFilter filter = new FileNameExtensionFilter("Textdateien", "txt");
// Den neu erstellen Filter zum Dialog hinzufügen.
fileDialog.addChoosableFileFilter(filter);
// Dialog anzeigen
fileDialog.showOpenDialog(this);
try {
FileReader file = new FileReader(fileDialog.getName());
BufferedReader reader = new BufferedReader(file);
String readText = reader.readLine();
while (readText != null) {
textfeld.setText(readText);
readText = reader.readLine();
}
} catch (IOException e) {
System.err.println("Ein Fehler ist beim Lesen aufgetreten!");
}
}
}
Ich kann leider die Fehlermeldung nicht entschlüsseln.
PS: Ich habe kein Präfix ausgewählt, da ich nicht wusste ob es ein Compiler- oder Interpreter-Fehler ist.