如何初始化图形? 因为它说没有初始化

我有我的部分代码,但它不会初始化,我不知道如何做到这一点。 它一直给我一个错误,比如memor.main中线程“main”java.lang.NullPointerException中的exception(memor.java:131)

import java.awt.*; import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.SwingConstants; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class memor extends JFrame { private static final long serialVersionUID = 1L; public static void main(String args[]){ final JPanel pan; GridLayout h=new GridLayout(3,3); pan =new JPanel(h); JButton button1= new JButton("1"); pan.add(button1); final JLabel label1= new JLabel("hi"); label1.setVisible(false); pan.add(label1); JButton button2= new JButton("2"); pan.add(button2); final JLabel label2= new JLabel("hi"); label2.setVisible(false); pan.add(label2); JButton button3= new JButton("3"); pan.add(button3); final JLabel label3 = new JLabel("hi"); label3.setVisible(false); pan.add(label3); JButton button4 = new JButton("4"); pan.add(button4); final JLabel label4 = new JLabel("hi"); label4.setVisible(false); pan.add(label4); JButton button5= new JButton("5"); pan.add(button5); final JLabel label5= new JLabel("hi"); label5.setVisible(false); pan.add(label5); JButton button6= new JButton("6"); pan.add(button6); final JLabel label6= new JLabel("hi"); label6.setVisible(false); pan.add(label6); JButton button7= new JButton("7"); pan.add(button7); final JLabel label7= new JLabel("hi"); label7.setVisible(false); pan.add(label7); JButton button8= new JButton("8"); pan.add(button8); final JLabel label8= new JLabel("howdy"); label8.setVisible(false); pan.add(label8); JButton button9= new JButton("9"); pan.add(button9); final JLabel label9= new JLabel("hi"); label9.setVisible(false); pan.add(label9); JLabel l=new JLabel("grid layout"); l.setHorizontalAlignment(SwingConstants.CENTER); button1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { label1.setVisible(true); } }); button2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { label2.setVisible(true); } }); button3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { label3.setVisible(true); } }); button4.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { label4.setVisible(true); } }); button5.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { label5.setVisible(true); } }); button6.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { label6.setVisible(true); } }); button7.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { label7.setVisible(true); } }); button8.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { label8.setVisible(true); } }); button9.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { label9.setVisible(true); } }); if (button1.isEnabled()){ Graphics g= pan.getGraphics(); g.setColor(new Color(156, 93, 82)); g.fill3DRect(21,3,7,12, true); g.setColor(new Color(156,23,134)); g.fillOval(1,15,15,15); g.fillOval(16,15,15,15); g.fillOval(31,15,15,15); g.fillOval(7,31,15,15); g.fillOval(22,31,15,15); g.fillOval(16,47,15,15); }} } 

如果这是一个Swing应用程序,那么你应该绘制一个BufferedImage,在这种情况下,你将通过getGraphics()获得BufferedImage的Graphics对象,或者你将在JPanel的paintComponent(Graphics g)方法中进行此绘制,将使用JVM传递给方法的Graphics对象。

为了将它与启用或未启用的JButton联系起来,我将一个ChangeListener添加到按钮的模型中,如果enabled属性发生变化则调用repaint,然后在JPanel的paintComponent方法中有一个if块,并且是否为在按钮启用状态下绘制形状。

有关更详细的帮助,请考虑发布sscce 。