代码没有错误但是运行时出现Exception in thread "main" java.lang.NullPointerException是为什么(附源码)

2401_83790898 2024-06-25 08:54:51

Exception in thread "main" java.lang.NullPointerException
    at java.awt.Container.addImpl(Container.java:1095)
    at java.awt.Container.add(Container.java:419)
    at javax.swing.JPopupMenu.add(JPopupMenu.java:291)
    at javax.swing.JMenu.add(JMenu.java:574)
    at com.hucpu.frame.MainFrame.<init>(MainFrame.java:34)
    at com.hucpu.frame.MainFrame.main(MainFrame.java:9)

 

import javax.swing.*;
import java.awt.*;

public class MainFrame extends JFrame{
    private static final JMenuItem polntExchangeItem = null;
    public static void main(String[] args) {
    new MainFrame();
    }
    private JMenuItem polintExchangeItem;
    private MainFrame(){
            this.setTitle("酒店管理系统");
            this.setSize(500,350);
            this.setLocation(150,150);//设置品行时该出口福示的位用
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setLayout(new FlowLayout());//将框架frame设置为流布局
            this.setVisible(true);
            userMenu.add(regItem);
            userMenu.add(loginItem);
            userMenu.add(logoutItem);
            //将会员管理主菜单添加到菜单栏框中
            bar.add(userMenu);
            //将菜单栏对象添加到主框架窗口中
            this.setJMenuBar(bar);
            accountMenu.add(queryMoneyItem);
            accountMenu.add(saveMoneyItem);
            accountMenu.add(consumeItem);
            //将会员消费菜单添加到菜单项
            bar.add(pointMenu);
            
            //为会员消费菜单添加菜单项
            pointMenu.add(queryPointItem);
            pointMenu.add(polintExchangeItem);
            //将会员消费菜单添加到菜单栏中
            bar.add(pointMenu);
        }
    
        JMenuBar bar= new JMenuBar();//为框架添加菜单栏  
        JMenu userMenu= new JMenu("会员管理");//添加‘会员管理’主菜单 
        //为会员管理主需单添加注册、登录、注销三个一级菜单项
        JMenuItem regItem = new JMenuItem("注册");
        JMenuItem loginItem = new JMenuItem("登录");
        JMenuItem logoutItem = new JMenuItem("注销");
        //将注册、登量、注销三个某单项违加到会员管理主采单中
        
        
        JMenu accountMenu = new JMenu("会员消费管理");//会员消费管理菜单
        JMenuItem saveMoneyItem = new JMenuItem("会员充值");//充值菜单项
        JMenuItem queryMoneyItem = new JMenuItem("查询余额");//查询余额菜单项
        JMenuItem consumeItem = new JMenuItem("会员消费");//会员消费菜单项
        JMenu pointMenu = new JMenu("会员积分管理");//会员积分管理菜单
        JMenuItem queryPointItem = new JMenuItem("查询积分");//查询积分菜单项
        JMenuItem pointExchangeItem = new JMenuItem("积分兑换");//会员兑换菜单项
        
    }


 

...全文
434 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

你的代码中存在一些问题,导致了 NullPointerException。以下是问题的详细分析和解决方案:

问题分析
polintExchangeItem 未初始化:

你在类的字段中声明了 private JMenuItem polintExchangeItem;,但在构造函数中使用的是 polintExchangeItem 而非 pointExchangeItem,并且未对其进行初始化。
类字段的声明和初始化顺序混乱:

你将大部分的菜单项和菜单的声明放在了类字段部分,而在构造函数中尝试添加这些未初始化的菜单项,这导致了 NullPointerException。
解决方案
确保所有的菜单项在使用之前都已经被正确初始化。
修正拼写错误,并确保代码的逻辑顺序正确。
以下是修正后的代码:

import javax.swing.;
import java.awt.
;

public class MainFrame extends JFrame {
public static void main(String[] args) {
new MainFrame();
}

private JMenuBar bar = new JMenuBar();// 为框架添加菜单栏
private JMenu userMenu = new JMenu("会员管理");// 添加‘会员管理’主菜单
private JMenu accountMenu = new JMenu("会员消费管理");// 会员消费管理菜单
private JMenu pointMenu = new JMenu("会员积分管理");// 会员积分管理菜单

// 为会员管理主菜单添加注册、登录、注销三个一级菜单项
private JMenuItem regItem = new JMenuItem("注册");
private JMenuItem loginItem = new JMenuItem("登录");
private JMenuItem logoutItem = new JMenuItem("注销");

// 会员消费管理菜单项
private JMenuItem queryMoneyItem = new JMenuItem("查询余额");
private JMenuItem saveMoneyItem = new JMenuItem("会员充值");
private JMenuItem consumeItem = new JMenuItem("会员消费");

// 会员积分管理菜单项
private JMenuItem queryPointItem = new JMenuItem("查询积分");
private JMenuItem pointExchangeItem = new JMenuItem("积分兑换");

private MainFrame() {
    this.setTitle("酒店管理系统");
    this.setSize(500, 350);
    this.setLocation(150, 150);// 设置窗口显示的位置
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLayout(new FlowLayout());// 将框架frame设置为流布局
    
    // 将会员管理主菜单添加到菜单栏框中
    userMenu.add(regItem);
    userMenu.add(loginItem);
    userMenu.add(logoutItem);
    bar.add(userMenu);

    // 将会员消费管理菜单添加到菜单栏中
    accountMenu.add(queryMoneyItem);
    accountMenu.add(saveMoneyItem);
    accountMenu.add(consumeItem);
    bar.add(accountMenu);

    // 为会员消费菜单添加菜单项
    pointMenu.add(queryPointItem);
    pointMenu.add(pointExchangeItem);
    // 将会员积分管理菜单添加到菜单栏中
    bar.add(pointMenu);
    
    // 将菜单栏对象添加到主框架窗口中
    this.setJMenuBar(bar);

    this.setVisible(true);
}

}
说明
初始化顺序:在类字段部分初始化所有的菜单和菜单项,然后在构造函数中按照逻辑顺序添加这些菜单项。
拼写错误:修正了 polintExchangeItem 为 pointExchangeItem。
通过这种方式,确保所有的菜单项在被添加到菜单之前都已经正确初始化,从而避免了 NullPointerException。

yn951193705 2024-06-27
  • 打赏
  • 举报
回复

我很同意,话说发15个字的评论能获得积分,我也试一试

崔灸舞 2024-06-25
  • 打赏
  • 举报
回复

public class MainFrame extends JFrame {
// 删除静态的 polntExchangeItem 变量

// ... 省略其他代码 ...

private MainFrame() {
    // ... 省略其他代码 ...

    // 将会员消费菜单添加到菜单项
    pointMenu.add(queryPointItem);
    // 使用正确的变量名 polintExchangeItem(注意拼写)
    pointMenu.add(polintExchangeItem); // 确保在这里之前已经初始化了 polintExchangeItem

    // ... 省略其他代码 ...
}

// ... 省略其他代码 ...

// 声明 polintExchangeItem 变量(注意拼写)
private JMenuItem polintExchangeItem = new JMenuItem("积分兑换"); // 初始化 polintExchangeItem

// ... 省略其他代码 ...

}

崔灸舞 2024-06-25
  • 举报
回复
@崔灸舞 请确保所有的 JMenuItem 和 JMenu 变量在尝试使用它们之前都已经被正确初始化。在你的代码中,我还注意到 userMenu 被添加到了 bar 两次(但只应该添加一次),你可能也需要修正这个问题。 修正后的代码片段可能如下: // ... 省略其他代码 ... bar.add(userMenu); // 添加会员管理菜单 // bar.add(pointMenu); // 这行是多余的,因为你已经在下方添加了 // ... 省略其他代码 ... // 将会员消费菜单添加到菜单栏中 bar.add(pointMenu); // 只添加一次 // ... 省略其他代码 ...
崔灸舞 2024-06-25
  • 打赏
  • 举报
回复

帮你修改了一下你自己改改

g5zhu5896 2024-06-25
  • 打赏
  • 举报
回复

polintExchangeItem 没有赋值导致空指针

2401_83790898 2024-06-25
  • 举报
回复
@g5zhu5896 怎么改啊
g5zhu5896 2024-06-25
  • 举报
回复
@2401_83790898 赋值啊。。。

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧