我启动GUI时为什么会出现NullPointerException?

max*_*mus 0 java user-interface swing exception nullpointerexception

我为我的CRUD程序编写了一个gui,当我想运行它时,我得到:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at gui.guimain$1.run(guimain.java:477)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
    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)
Run Code Online (Sandbox Code Playgroud)

这是NPE来自的代码:

public static void main(String[] args){
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run(){
                maingui.showStart();// thats the line with the Exception
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

那就是方法showStart():

public void showStart(){
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainFrame.getContentPane().removeAll();
    tabstructure.removeAll();
    Produkt filter=new Produkt();

    JPanel P=new JPanel();
    P=Produktgui(0, filter);
    JPanel R=new JPanel();
    R=Billgui(0);
    JPanel nR=new JPanel();
    nR=Billgui(0);

    tabstructure.addTab("e", P);
    tabstructure.addTab("Bills", R);
    tabstructure.addTab("Pay bill", nR);
    mainFrame.getContentPane().add(tabstructure);
    mainFrame.validate();
    mainFrame.repaint();
    mainFrame.pack();
    mainFrame.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)

为什么我得到一个NullPointerException

mab*_*aba 6

您将不得不创建一个实例MainGui.

public static void main(String[] args) {
    final MainGui maingui = new MainGui();
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run(){
                maingui.showStart();// thats the line with the Exception
        }
    });
}
Run Code Online (Sandbox Code Playgroud)


Jes*_*per 5

因为你正在调用方法的东西是null.

仔细查看错误消息.它说异常发生在第477行guimain.java.

那时,mainguinull.


FTh*_*son 5

必须先实例化对象,然后才能调用它们的方法.在这种情况下,maingui尚未实例化.

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            MainGUI maingui = new MainGUI();
            maingui.showStart();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)