先是主类里面的保存函数
  if(e.getSource()==saveManul){
           startMakeManul.setVisible(false);
           JFileChooser chooser=new JFileChooser();
           int state=chooser.showSaveDialog(null);
           File file=chooser.getSelectedFile();
           if(file!=null&&state==JFileChooser.APPROVE_OPTION){
             try{ 
                  FileOutputStream out=new FileOutputStream(file);
                  ObjectOutputStream objectOut=new ObjectOutputStream(out);
                  objectOut.writeObject(board); 
                  out.close(); 
                  objectOut.close(); 
            }
            catch(Exception event){}
           } 
       } 然后个人发现保存错误居然是在子类里面用了一个drawimage 的函数!!! 子类的所有代码如下:  public void paintComponent(Graphics g){//绘制出棋盘上的横线、竖线和其他必要的图形
        super.paintComponent(g);
        // g.setColor(Color.blue);    //将背景色设置为绿色
       //  g.fillRect(0,0,this.getBounds().width,this.getBounds().height);       
        //代码出错于此,img是Image的一个类,用toolkit来获取的,如果不用drawImage函数的话,用fillRect完
       //   全可以保存,并顺利打开 !!!!!!       
        
    //g.drawImage(img,0,0,this.getBounds().width,this.getBounds().height,this);
         if(ChinaChess.a==1){ g.setColor(Color.pink);   }
         
         else if(ChinaChess.a==2){g.setColor(Color.yellow); g.fillRect(0,0,this.getBounds().width,this.getBounds().height);repaint(); }
         else if(ChinaChess.a==3){ g.setColor(Color.blue); repaint();  }
         else { g.setColor(Color.green); repaint();}
         g.fillRect(0,0,this.getBounds().width,this.getBounds().height);
         
       
         
        g.setColor(Color.orange);      
        g.fillRect(playPoint[0][0].x,playPoint[0][0].y,8*distance,9*distance);
        g.setColor(Color.black);//将棋盘的线设置为黑色
        for(int i=0;i<=m-1;i++){   
          g.drawLine(playPoint[i][0].x,playPoint[i][0].y,
                     playPoint[i][n-1].x,playPoint[i][n-1].y); 
        }
        for(int j=0;j<=n-1;j++){ 
          if(j>0&&j<n-1){  
           g.drawLine(playPoint[0][j].x,playPoint[0][j].y,
           playPoint[4][j].x,playPoint[4][j].y);
           g.drawLine(playPoint[5][j].x,playPoint[5][j].y,
           playPoint[m-1][j].x,playPoint[m-1][j].y); 
          } 
          else{
           g.drawLine(playPoint[0][j].x,playPoint[0][j].y,
           playPoint[m-1][j].x,playPoint[m-1][j].y);
          }
        }
 打开保存的东西:
    public void showBoardManul(){
        stepNumber=1;
        stackStep.clear();
        stackBack.clear(); 
        if(demoOne!=null)
           remove(demoOne);
        try{
               FileInputStream file_in=new FileInputStream(file);
               ObjectInputStream object_in=new ObjectInputStream(file_in);
               demoOne=(ChessBoard)object_in.readObject();
               file_in.close();
               object_in.close();
               ChessPiece [] redPiece=demoOne.getRedPiece();
               ChessPiece [] blackPiece=demoOne.getBlackPiece();
               for(int i=0;i<redPiece.length;i++){
                  MouseListener [] listener=redPiece[i].getMouseListeners();
                  for(int k=0;k<listener.length;k++)
                       redPiece[i].removeMouseListener(listener[k]);
                  listener=blackPiece[i].getMouseListeners();
                  for(int k=0;k<listener.length;k++)
                      blackPiece[i].removeMouseListener(listener[k]);
                  MouseMotionListener [] mr=redPiece[i].getMouseMotionListeners();
                  for(int k=0;k<mr.length;k++)
                      redPiece[i].removeMouseMotionListener(mr[k]);
                  mr=blackPiece[i].getMouseMotionListeners();
                  for(int k=0;k<mr.length;k++)
                      blackPiece[i].removeMouseMotionListener(mr[k]);
               }
               step=demoOne.getStep();
               for(int i=step.size()-1;i>=0;i--){
                   stackStep.push(step.get(i)); 
               }
               demoOne.remove(demoOne.cancel);
               restoreChessBoard(step);
               split.setRightComponent(new JScrollPane(demoOne)); 
        }
        catch(Exception exp){
            add(new JButton("不是棋谱文件"),BorderLayout.CENTER);
        }
    }    ps:本人经过无限次测试,发现打开是没错的,就是保存那里不知道发生了什么事,一用drawImage就会报错,求答案!