public class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable {
private static final long serialVersionUID = 1L;
JLabel play[]=new JLabel[32];
Vector Var;
ChessRule rule;
boolean chessManClick;
int chessPlayClick=2;
Thread tmain;
static int Man,i;
ChessMainFrame(String Title){
con=this.getContentPane();
con.setLayout(null);
rule=new ChessRule();
// Var=new Vector();
jmain=new JToolBar();
text=new JLabel("欢迎使用中国象棋程序");
text.setToolTipText("信息提示");
anew=new JButton("新游戏");
anew.setToolTipText("重新开始");
exit=new JButton("退出");
exit.setToolTipText("退出程序");
repent=new JButton("退回上次棋谱");

jmain.setLayout(new GridLayout(0,4));
jmain.add(anew);
jmain.add(repent);
jmain.add(exit);
jmain.add(text);
jmain.setBounds(0,0,558,30);
con.add(jmain);
drawChessMan();
anew.addActionListener(this);
repent.addActionListener(this);
exit.addActionListener(this);
    con.add(image=new JLabel(new ImageIcon("main.jpg")));
    image.setBounds(0, 30,558, 620);
image.addMouseListener(this);
for(i=0;i<32;i++){
con.add(play[i]);
play[i].addMouseListener(this);
    }

this.setResizable(true);
this.setTitle(Title);
this.setSize(558,670);
this.setVisible(true);
}
public void drawChessMan()
{
int i,k;
Icon in;
in=new ImageIcon("黑车.gif");
for(i=0,k=24;i<2;i++,k+=456){
play[i]=new JLabel(in);
play[i].setBounds(k,56,55,55);
play[i].setName("车1");
}
in=new ImageIcon("黑马.gif");
for(i=4,k=81;i<6;i++,k+=342){
play[i]=new JLabel(in);
play[i].setBounds(k,56,55,55);
play[i].setName("马1");
}
in=new ImageIcon("黑象.gif");
for(i=8,k=138;i<10;i++,k+=228){
play[i]=new JLabel(in);
play[i].setBounds(k,56,55,55);
play[i].setName("象1");
}
in=new ImageIcon("黑士.gif");
for(i=12,k=195;i<14;i++,k+=114){
play[i]=new JLabel(in);
play[i].setBounds(k,56,55,55);
play[i].setName("士1");
}
in=new ImageIcon("黑卒.gif");
for(i=16,k=24;i<21;i++,k+=114){
play[i]=new JLabel(in);
play[i].setBounds(k,227,55,55);
play[i].setName("卒1"+i);
}
in=new ImageIcon("黑炮.gif");
for(i=26,k=81;i<28;i++,k+=342){
play[i]=new JLabel(in);
play[i].setBounds(k,170,55,55);
play[i].setName("炮1"+i);
}
in=new ImageIcon("黑将.gif");
play[i]=new JLabel(in);
play[i].setBounds(252,56,55,55);
play[i].setName("将1");


in=new ImageIcon("红车.gif");
for(i=2,k=24;i<4;i++,k+=456){
play[i]=new JLabel(in);
play[i].setBounds(k,569,55,55);
play[i].setName("车2");
}
in=new ImageIcon("红马.gif");
for(i=6,k=81;i<8;i++,k+=342){
play[i]=new JLabel(in);
play[i].setBounds(k,569,55,55);
play[i].setName("马2");
}
in=new ImageIcon("红象.gif");
for(i=10,k=138;i<12;i++,k+=228){
play[i]=new JLabel(in);
play[i].setBounds(k,569,55,55);
play[i].setName("象2");
}
in=new ImageIcon("红士.gif");
for(i=14,k=195;i<16;i++,k+=114){
play[i]=new JLabel(in);
play[i].setBounds(k,569,55,55);
play[i].setName("士2");
}
in=new ImageIcon("红兵.gif");
for(i=21,k=24;i<26;i++,k+=114){
play[i]=new JLabel(in);
play[i].setBounds(k,569,55,55);
play[i].setName("卒2"+i);
}
in=new ImageIcon("红炮.gif");
for(i=28,k=81;i<30;i++,k+=342){
play[i]=new JLabel(in);
play[i].setBounds(k,455,55,55);
play[i].setName("炮2"+i);
}
in=new ImageIcon("红将.gif");
play[31]=new JLabel(in);
play[31].setBounds(252,569,55,55);
play[31].setName("将2");

public void actionPerformed(ActionEvent ae) {
if(ae.getSource().equals(anew)){
        int i,k;
        for(i=0,k=24;i<2;i++,k+=456){
play[i].setBounds(k,56,55,55);
}
        for(i=4,k=81;i<6;i++,k+=342){
play[i].setBounds(k,56,55,55);
}
for(i=8,k=138;i<10;i++,k+=228){
play[i].setBounds(k,56,55,55);
}
for(i=12,k=195;i<14;i++,k+=114){
play[i].setBounds(k,56,55,55);
}
for(i=16,k=24;i<21;i++,k+=114){
play[i].setBounds(k,227,55,55);
}
for(i=26,k=81;i<28;i++,k+=342){
play[i].setBounds(k,170,55,55);
}
play[i].setBounds(252,56,55,55);


for(i=2,k=24;i<4;i++,k+=456){
play[i].setBounds(k,569,55,55);
}
for(i=6,k=81;i<8;i++,k+=342){
play[i].setBounds(k,569,55,55);
}
for(i=10,k=138;i<12;i++,k+=228){
play[i].setBounds(k,569,55,55);
}
for(i=14,k=195;i<16;i++,k+=114){
play[i].setBounds(k,569,55,55);
}
for(i=21,k=24;i<26;i++,k+=114){
play[i].setBounds(k,569,55,55);
}
for(i=28,k=81;i<30;i++,k+=342){
play[i].setBounds(k,455,55,55);
}
play[31].setBounds(252,569,55,55); 
        
        chessPlayClick=2;
        text.setText("红旗先走");
        for(i=0;i<32;i++){
         play[i].setVisible(true);
        }
        Var.clear();
   }
//else if(ae.getSource().equals(repent)){
//try{
//
//
//}
else if(ae.getSource().equals(exit)){
int j=JOptionPane.showConfirmDialog(this, "真的要退出吗?","退出",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
if(j==JOptionPane.YES_OPTION){
System.exit(0);
}
}
} }问题:没有错误,但是编译的时候总会出项下面问题,删除红色部分后可以运行,但是棋子加不上去啊,这是为什么呢?Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at Chess.ChessMainFrame.<init>(ChessMainFrame.java:67)
at Chess.Chess.main(Chess.java:5)

解决方案 »

  1.   

    又是NullPointerException,这周见了好几次了
      

  2.   

    这里使用play[i]的时候,数组各元素中还没有东西,所以报错。
    可以在这几行代码前调用drawChessMan()来初始化数组中各元素
      

  3.   

    太乱了  而且我也没找到你那个Chess类。
      

  4.   

    数组中的play[30]这个元素
    没有初始化,为null
    这种代码太乱了,说不定就漏掉点什么
    楼主的编程习惯有待规范化
      

  5.   

    黑将是第30号元素,就是这个漏掉没有初始化,请修改为in=new ImageIcon("黑将.gif");
    play[30]=new JLabel(in);
    play[30].setBounds(252,56,55,55);
    play[30].setName("将1");