JPanel 和 CardLayout 出现 NullPointerException 错误

2024-02-25

我正在为课堂开发酒店管理软件,我的代码遇到了一些问题。此时,我只是尝试将我在单独的类中创建的 JPanel 添加到我的主 gui 中。任何帮助将不胜感激。 〜谢谢!

Exception in thread "main" java.lang.NullPointerException
    at java.awt.Container.addImpl(Unknown Source)
    at java.awt.Container.add(Unknown Source)
    at hotelManage.HotelSystem.showGUI(HotelSystem.java:75)
    at hotelManage.HotelSystem.<init>(HotelSystem.java:27)
    at hotelManage.HotelSystem.main(HotelSystem.java:115)

注意:错误发生在“jpanel.add("Room", room.getRoomPanel());”行

代码: 酒店系统.java

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

import javax.swing.*;

public class HotelSystem extends JFrame implements ActionListener {
    /**
     * 
     */
    private static final long serialVersionUID = 1840835913045151061L;

    private JFrame mainFrame;
    private JPanel mainPanel;
    private JButton btnRoom;
    private JButton btnCustomer;
    private JButton btnOrder;
    private JButton btnSearch;
    RoomSystem room;

    //RoomSystem room = new RoomSystem();


    public HotelSystem(){
        prepareGUI();
        showGUI();
        registerListeners();


    }

    private void prepareGUI(){
        mainFrame = new JFrame("Hotel Management System");
        mainFrame.setSize(500,500);
        mainFrame.setLayout(new GridLayout(1,1));

        btnRoom = new JButton("Room Editor");
        btnCustomer = new JButton("Customer Editor");
        btnOrder = new JButton("Order");
        btnSearch = new JButton("Search");

        //main panel
        mainPanel = new JPanel();
        mainPanel.setLayout(new FlowLayout());

        mainFrame.add(mainPanel);
        mainFrame.setVisible(true);




    }

    private void showGUI(){
        final JPanel jpanel = new JPanel();
        jpanel.setBackground(Color.CYAN);
        jpanel.setSize(300,300);

        CardLayout cLayout = new CardLayout();
        cLayout.setHgap(5);
        cLayout.setVgap(5);
        jpanel.setLayout(cLayout);



        JPanel btnPanel = new JPanel(new FlowLayout());
        btnPanel.add(btnRoom);
        btnPanel.add(btnCustomer);
        btnPanel.add(btnOrder);
        btnPanel.add(btnSearch);
        jpanel.add("Button", btnPanel);
        jpanel.add("Room", room.getRoomPanel());

        mainPanel.add(jpanel);
        mainPanel.setVisible(true);  


    }

    public void registerListeners(){
        //register all buttons to self
        btnRoom.addActionListener(this);
        btnCustomer.addActionListener(this);
        btnOrder.addActionListener(this);
        btnSearch.addActionListener(this);

    } // end registerListeners

    public void actionPerformed(ActionEvent e){
        System.out.println(e.getActionCommand());
        //check all button presses and send
        //control to appropriate methods
       if (e.getSource() == btnRoom){

        } else if (e.getSource() == btnCustomer){

        } else if (e.getSource() == btnOrder){

        } else if (e.getSource() == btnSearch){

        } else {
            //lblOutput.setText("something went wrong");
        } // end if


    } // end actionPerformed


    public static void main(String[] args) {
        new HotelSystem();

    }


}

RoomSystem.java

import java.awt.*;

import javax.swing.*;



public class RoomSystem {


    //private JTextField roomName;
    private JButton btnEdit;
    private JPanel roomPanel;
    //private JButton roomCancel;

    //array here

    public RoomSystem(){
        btnEdit = new JButton("Create");

        JPanel roomPanel = new JPanel(new FlowLayout());
        roomPanel.add(btnEdit);


        roomPanel.setVisible(true);

    }



    public JPanel getRoomPanel() {
        return roomPanel;
    }


    public void setRoomPanel(JPanel roomPanel) {
        this.roomPanel = roomPanel;
    }




}

jpanel.add("Room", room.getRoomPanel());

你从未初始化过room

RoomSystem room;

即使你初始化它RoomSystem room = new RoomSystem(),你还有另一个问题RoomSystem班级。你已经影子了roomPanel,因此当您尝试调用时,类成员为 nullgetRoomPanel()。在你的构造函数中,改变

// shadowing the class field roomPanel
JPanel roomPanel = new JPanel(new FlowLayout());  

to 

roomPanel = new JPanel(new FlowLayout());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPanel 和 CardLayout 出现 NullPointerException 错误 的相关文章

  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp

随机推荐

  • 如何在CKeditor中添加音频标签

    我已经添加了html5audio插件并能够获取上传按钮 但如何将上传的文件发送到服务器 这是我的插件代码 id Upload hidden false filebrowser uploadButton label editor lang h
  • Bash 脚本在 Linux 中将 pdf 打印为 pdf

    这个问题可能听起来有点奇怪 但实际任务相对简单 我发誓 我使用 PDFCreator 将生成的 FDF 合并到预先存在的 PDF 中 从 Web 表单自动生成一些 PDF 我在 NitroPDF 中创建了预先存在的 PDF 此设置有效gre
  • 如何使用 Ruby 和 eventmachine 进行日志记录?

    我正在使用 Ruby 和 Eventmachine 库编写一个应用程序 我真的很喜欢非阻塞 I O 和事件驱动系统的想法 我遇到的问题是日志记录 我正在使用 Ruby 的标准记录器库 这并不是说日志记录需要永远进行 但它似乎不应该被阻止 但
  • TestNG - 将自定义属性添加到@Test注释

    我需要向现有的 Test 注释添加自定义属性 如下所示 Test description some description newAttribute some value public void testMethod unit integr
  • WordPress 从 get_the_tag_list 中排除标签

    当我使用自定义模板标签输出单个帖子标签时 如何从标签列表中排除已定义的标签名称 好吧 没有过滤器可以删除其中的术语get the tag list但在内部它要求get the terms所以你可以在那里添加过滤器 考虑这个例子 add fi
  • 无法找到或加载 Qt 平台插件“windows”

    首先 为了防止重复报告 我尝试了多种解决方案here https stackoverflow com questions 17366967 failed to load platform plugin windows available p
  • 运行时错误无法解析 GoogleMap 的所有参数:(?, ?)

    我正在尝试将基本地图加载到我的模板上 我只是按照这个说明操作https ionicframework com docs native google maps https ionicframework com docs native goog
  • htaccess 301 仅重定向根目录,但排除所有文件和子文件夹(有例外)

    我不是程序员 htaccess代码 我阅读了其他相关帖子但不明白它们 他们没有一个做我需要的事情 我有一个运行在以下位置的 WordPress 网站http example com main但想重定向http example com to
  • Renderscript 无法运行的设备列表

    我的应用程序需要 Renderscript 因为它执行一些在 Java 中需要几秒钟的图像处理 在发布之前 我已经在许多设备上测试了它 甚至是一些较旧的型号 例如 Samsung Galaxy Tab 2 API 17 并且即使在这些设备上
  • 添加新节点时,链表的浅拷贝不反映更改

    I have done a lot of readings but seems like I can t clear my confusion without asking here Based on the diagram when I
  • 全部连接关闭时的任务

    我正在尝试使用 Task WhenAll 执行多个 SqlDataReaders 但是当任务等待时我得到 System InvalidOperationException 无效操作 连接 关闭了 创建任务 List
  • 在哪里可以找到 Visual Studio 中安装的 TypeScript 版本?

    也许这是显而易见的 但我检查了所有地方 除了正确的地方 并用谷歌搜索了它 没有什么 如果您只为 Visual Studio 安装了 TypeScript 则 开始Visual Studio 命令提示符 https msdn microsof
  • Apache代理负载均衡后端服务器故障检测

    这是我的场景 由我的前任设计 两台 Apache 服务器为多个混合后端 Web 服务器 Apache IIS Tomcat 等 提供反向代理服务 有些网站我们有多个后端 Web 服务器 在这些情况下 我们会执行以下操作
  • 恢复 Github Desktop 中丢失的隐藏更改 (Windows 10)

    作为初学者使用 Github Desktop Windows 10 上的 v 2 9 6 当在分支之间来回移动时 我会存储更改以将其保留在分支上以供以后使用 但是连续执行两次 它实际上会覆盖并删除之前的存储 而不是将更改堆叠到存储中 因此我
  • Visual Studio 自动完成 C++ 的 Doxygen 标签

    有没有办法让 Visual Studio 自动将 doxygen 标签放入 C 源文件中 我的意思是例如这段代码 int foo bool p 如果我输入 在其之上 Visual Studio 自动生成以下行
  • 负整数返回零

    一位朋友只是抛出了一些类似于以下 C 代码的代码 int i return i lt 0 0 i 这让我思考 有什么 不同 的方式来返回负整数零或当前正值 更具体地说 如果可能的话 我正在寻找按位运算 顺便说一句 我知道Math Max 0
  • 如何在这个程序中使用枚举?

    f open Student dat r opens Student dat file roll1 input Enter roll to be found to find a record in a list using a roll n
  • 移动浏览器上的“自动播放”HTML5 音频播放器

    我正在为移动用户创建一个 HTML5 音乐网站 目标是让它完全在移动浏览器中运行 问题是 当用户选择要播放的曲目时 他们会被带到 播放器 页面 然后我在 HTML5 音频元素中进行 AJAX 并将 autoplay 属性设置为 true 这
  • jQuery 从元素中删除特定文本

    我想从我的网站的元素中删除文本 By 我希望文本的其余部分保留在那里 我怎样才能用 jQuery 实现这一点 谢谢 The HTML div By Anonymous From Minnesota div 我希望它只是 div Anonym
  • JPanel 和 CardLayout 出现 NullPointerException 错误

    我正在为课堂开发酒店管理软件 我的代码遇到了一些问题 此时 我只是尝试将我在单独的类中创建的 JPanel 添加到我的主 gui 中 任何帮助将不胜感激 谢谢 Exception in thread main java lang NullP