//引入包
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.lang.*;
import javax.swing.JOptionPane;
public class Tupianjiemian extends JPanel 
{
//声明变量
JButton[][] bu;
int flag;
public Tupianjiemian()
{
//布局设置为3*3的格式,并声明i是竖坐标,j是横坐标
super(new GridLayout(3,3));
bu=new JButton[3][3];
         for(int i=0,cnt=1;i<3;i++)
for(int j=0;j<3;j++,cnt++)
{
ImageIcon imageicon1=new ImageIcon("1.jpg");
JButton jutton1=new JButton("1",imageicon1); 
ImageIcon imageicon2=new ImageIcon("2.jpg");
JButton jutton2=new JButton("2",imageicon2);
ImageIcon imageicon3=new ImageIcon("3.jpg");
JButton jutton3=new JButton("3",imageicon3);
ImageIcon imageicon4=new ImageIcon("4.jpg");
JButton jutton4=new JButton("4",imageicon4);
ImageIcon imageicon5=new ImageIcon("5.jpg");
JButton jutton5=new JButton("5",imageicon5);
ImageIcon imageicon6=new ImageIcon("6.jpg");
JButton jutton6=new JButton("6",imageicon6);
ImageIcon imageicon7=new ImageIcon("7.jpg");
JButton jutton7=new JButton("7",imageicon7);
ImageIcon imageicon8=new ImageIcon("8.jpg");
JButton jutton8=new JButton("8",imageicon8);

bu[i][j].setActionCommand("bu"+i+j);
bu[i][j].addActionListener((new MoveListener()));
bu[i][j].setFont(new Font("Arial",Font.BOLD,15));
add(bu[i][j]);
}

}
//建立发生事件
public class MoveListener implements  ActionListener
{
public void actionPerformed(ActionEvent e)
    {
    for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
if(e.getSource().equals(bu[i][j]))
{
if(j+1<3&&bu[i][j+1].getLabel()=="")
{
bu[i][j+1].setLabel(bu[i][j].getLabel());
bu[i][j].setLabel("");
}
if(i+1<3&&bu[i+1][j].getLabel()=="")
{
bu[i+1][j].setLabel(bu[i][j].getLabel());
bu[i][j].setLabel("");
}
if(j-1>-1&&bu[i][j-1].getLabel()=="")
{
bu[i][j-1].setLabel(bu[i][j].getLabel());
bu[i][j].setLabel("");
}
if(i-1>-1&&bu[i-1][j].getLabel()=="")
{
bu[i-1][j].setLabel(bu[i][j].getLabel());
bu[i][j].setLabel("");
}
}
}
if(bu[0][0].getLabel()=="")
  {
flag=0;
for(int i=2,cnt=15;i>=0;i--)
{
for(int j=2;j>=0;j--,cnt--)
{
     if(cnt!=1)
if(e.getSource().equals(bu[Math.abs(i-2)][Math.abs(j-2)]))
flag++;
    }
}
      }
    }
     }     public static void main(String args[]) 
    {
        JFrame frame = new JFrame();
        frame.add(new Tupianjiemian());
        frame.setVisible(true);
        frame.setSize(300,300);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }
   
     
}
这串代码图片添加上去后检验没有问题··但是运行就有这样的错误,不能显示出来···
Exception in thread "main" java.lang.NullPointerException
    at Tupianjiemian.<init>(Tupianjiemian.java:47)
    at Tupianjiemian.main(Tupianjiemian.java:105)Process completed.这是怎么回事啊???麻烦各位指点一下··谢谢··