Search code examples
javacardlayout

CardLayout with Exception on add?


It's my first try to run code with Cardlayout. It's an exception(nullpointer) on a add method. However I tried also to figure out how to design the cardlayout e.g. the cards, side by side or one below the other. I prefer the latter. I tried already to change my code and read other topics about similar problems. Sorry for any misunderstandings.

Thank you

     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);

 }
}


Solution

  • The JPanel start was never initialized. Thus it's calling a null pointer on the start variable. Try to initialize JPanel start before you add the component.