NullPointerException beim Einfügen einer JMenuBar

xyz123

Mitglied
Hallo,
ich versuche gerade ein Menü-Leiste in mein Programm einzufügen, bekomme aber jedes Mal eine NullPointerException. Ich habe jetzt schon einiges probiert und verwende gerade den Code aus einem Java-Tutorial, funktioniert auch nicht.
Hier Ausschnitte aus meinem Programm:

Java:
 package guidbapp;

import java.io.FileNotFoundException;
import javax.swing.JFrame;

//fügt alle Komponenten zusammen, die Programm besitzt
public class HauptFenster extends JFrame{

    private MenuLeiste mLeiste;
    private TabbedFrame tFrame;
    public JFrame frame;

    public HauptFenster() throws FileNotFoundException{
        setTitle("Datenbank GUI");

        mLeiste = new MenuLeiste();
        tFrame = new TabbedFrame();

        frame.setJMenuBar(mLeiste.createMenuBar());
        //frame.add(tFrame);
    }

}

Java:
package guidbapp;

import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;

//Hier wird festgelegt, welche Felder die Menü-Leiste besitzt
public class MenuLeiste{

    /*
    JMenuBar menuLeiste = new JMenuBar();
    JMenu menuDatei = new JMenu("Datei");
    JMenu menuBearbeiten = new JMenu("Bearbeiten");
    JMenuItem menuEintragOeffnen = new JMenuItem("Datei öffnen");
     */

    public MenuLeiste(){}

    public JMenuBar createMenuBar(){
        JMenuBar menuLeiste;
        JMenu menu, submenu;
        JMenuItem menuItem;

        menuLeiste = new JMenuBar();

        menu = new JMenu("Datei");
        menu.setMnemonic(KeyEvent.VK_A);
        menu.getAccessibleContext().setAccessibleDescription("Das einzige Menü mit Unterpunkten");
        menuLeiste.add(menu);

        menuItem = new JMenuItem("Öffnen", KeyEvent.VK_T);
        menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, ActionEvent.ALT_MASK));
        menuItem.getAccessibleContext().setAccessibleDescription("This doesn't do really anything");
        menu.add(menuItem);

        menuLeiste.add(menu);
        return menuLeiste;
    }
}

Java:
package guidbapp;

import java.awt.EventQueue;
import java.io.FileNotFoundException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;

public class GuiDBApp {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            public void run() {
                HauptFenster frame = null;
                try {
                    frame = new HauptFenster();
                } catch (FileNotFoundException ex) {
                    Logger.getLogger(GuiDBApp.class.getName()).log(Level.SEVERE, null, ex);
                }
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }

}

Fehlermeldung:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at guidbapp.HauptFenster.<init>(HauptFenster.java:20)
at guidbapp.GuiDBApp$1.run(GuiDBApp.java:18)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:226)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:602)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
 
frame ist null (Hauptfenster, Zeile 19)


//Edit: da Hauptfenster ja bereits per Ableitung ein JFRame ist: ist das Member frame möglicherweise überflüssig?
 
Zuletzt bearbeitet:
Und nebenbei gesagt ist der Code auch ziemlich chaotisch. Überlege dir, ob du auch wirklich brauchst, was du da deklariert hast. Immerhin erbt deine Klasse Hauptfenster bereits von JFrame.
[JAVA=19]this.setJMenuBar(mLeiste.createMenuBar());
[/code]müsste gehen, wenn du den Code von MenuLeiste noch in Ordnung bringst.
 
Ah super, jetzt funktioniert's.

Und ja das Member Frame in der Klasse Hauptfenster ist überflüssig. Und der Code ist chaotisch, aber ich habe auch erst damit angefangen, wird schon noch .... hoffentlich.

Vielen Dank euch für die schnelle Hilfe.
 

Zurück
Oben