当前位置: 首页 > 面试题库 >

JPanel和CardLayout出现NullPointerException错误

姬慎之
2023-03-14
问题内容

我正在上课的酒店管理软件上工作,我的代码遇到了一些问题。此时,我只是想将我在单独的类中创建的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());“行上

代码:HotelSystem.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,因此在尝试调用时,类成员为null
getRoomPanel()。在您的构造函数中,更改

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

to

roomPanel = new JPanel(new FlowLayout());


 类似资料:
  • 当我试图调用actionPerformed方法中的panel2时,我得到了NullPointerException。请帮我摆脱这愚蠢的prblm。 action事件没有附加在panel2中,这是导致此异常的原因吗?

  • 我试图让两个不同的选择框同时工作,但是我在initialize方法中得到一个nullpointer错误。这有点奇怪,因为我正在尝试初始化选择框中的内容,但IDE却给了我一个nullpointer异常。 这是我的密码 它还告诉我,在处的主类中有一个错误 sample.fxml文件是一个不同的场景,基本上它只是一个开始场景,用户可以在两个不同的场景中选择要转到的场景

  • 下面是用eclipse IDE编写的Java代码... 线程“main”java.lang.NullPointerException在compile.execute.main(execute.java:17)中出现异常 你能告诉我如何解决这个错误吗?

  • 问题内容: 使用Java CardLayout时是否可以更改Jpanels的大小? 问题答案: 拍摄,像这样,在组件(这里是JLabel而不是JPanel)设置了preferredSize,然后将其放置在使用适当布局的另一个JPanel中,这里是GridBagLayout,默认设置会将组件居中,并使用GridBagLayout添加使用面板将JPanel转换为CardLayout ::

  • 文件“icon.png”与类在同一个文件夹中。但是,如果我只是使用(新图像(icon.png)),然后它说java.lang.IllegalArgumentExcoop:无效的URL:无效的URL或资源未找到。但是现在添加getClass(). getResources...我得到了这个错误。这是我的代码: 下面是错误: 请帮我修一下。提前谢谢!

  • 问题内容: 我是Java的初学者,我正在尝试创建一个在光标所在的位置绘制一个矩形的应用程序。我已经完成了所有操作,但无法获得重绘的信息。如果没有重绘,则矩形仅绘制一次,仅此而已。使用重新绘制,它可以很好地编译,但是当我运行它时,每次移动鼠标时,都会出现这个大错误。 所以,有人可以帮我吗? 问题答案: 希望代码示例中的注释能够告诉您您在代码中做错了什么:-),否则总有理由提出您的疑问…