有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java CardLayout在添加时出现异常?

这是我第一次尝试使用Cardlayout运行代码。 这是add方法上的异常(null指针)。 然而,我也试图找出如何设计卡片布局,例如,并排或一张低于另一张的卡片。我喜欢后者。 我已经尝试过修改我的代码,并阅读了关于类似问题的其他主题。对不起,有什么误会

多谢各位

     package jnotizen;

     import java.awt.BorderLayout;
     import java.awt.CardLayout;
     import java.awt.event.ItemEvent;
     import java.awt.event.ItemListener;
     import java.awt.image.BufferedImage;
     import java.io.IOException;
     import java.io.InputStream;
     import javax.imageio.ImageIO;
     import javax.swing.*;
     import javax.swing.SwingUtilities;
     import javax.swing.UIManager;

     /**
     *
     * 
     */
     public class JNotizen {

     /**
    * @param args the command line arguments
    */
    JFrame f;
    BorderLayout bl;
    JPanel p;
    JPanel start;
    JPanel notices;
    CardLayout c;
    JTextArea ta;
    JButton nn;
    JButton sv;
    JButton sn;
    String controls = "Controls";
    String noticeBoard = "NoticeBoard";

    public static void main(String[] args) {
    // TODO code application logic here
     SwingUtilities.invokeLater(new Runnable() {
    public void run() {
    //Turn off metal's use of bold fonts
     UIManager.put("swing.boldMetal", Boolean.FALSE);
     new JNotizen().startApp();
    }
   }); 

}

private void startApp() {

 c = new CardLayout();
 p = new JPanel(c);

 nn = new JButton("New Notice");
 sv = new JButton("Save Notice");
 sn = new JButton("Search Notice");
 ta = new JTextArea("");

 start.add(nn); // here I get the NullpointerException?
 start.add(sv);
 start.add(sn);

 notices.add(ta);

 p.add(start, controls);
 p.add(notices, noticeBoard);

 CardLayout cl = (CardLayout)(p.getLayout());
 cl.first(p);

 BufferedImage img = null;
 try {
  InputStream inStream =   this.getClass().getClassLoader().getResourceAsStream("iconHash2.jpg");
  img = ImageIO.read(inStream);
 } catch (IOException e) {}
 f = new JFrame();
 f.getContentPane().add(p, BorderLayout.CENTER);
 f.setTitle("NoticeBoard");
 f.setIconImage(img);
 f.setSize(450,550);
 f.setResizable(false);
 f.setVisible(true);
 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 }
}


共 (1) 个答案

  1. # 1 楼答案

    {}从未初始化。因此,它调用了start变量上的空指针。在添加组件之前,尝试初始化JPanel start