NullPointerException JPanel和CardLayout出错

我正在为课堂上的酒店管理软件工作,我的代码遇到了一些问题。 在这一点上,我只是试图将我在一个单独的类中创建的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.(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类还有另一个问题。 当你尝试调用getRoomPanel()时,你有了roomPanel ,因此类成员为null。 在您的构造函数中,进行更改

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