问题描述
先是主类里面的保存函数
if(e.getSource()==saveManul){startMakeManul.setVisible(false);JFileChooserchooser=newJFileChooser();intstate=chooser.showSaveDialog(null);Filefile=chooser.getSelectedFile();if(file!=null&&state==JFileChooser.APPROVE_OPTION){try{FileOutputStreamout=newFileOutputStream(file);ObjectOutputStreamobjectOut=newObjectOutputStream(out);objectOut.writeObject(board);out.close();objectOut.close();}catch(Exceptionevent){}}}然后个人发现保存错误居然是在子类里面用了一个drawimage的函数!!!子类的所有代码如下:
publicvoidpaintComponent(Graphicsg){//绘制出棋盘上的横线、竖线和其他必要的图形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);}elseif(ChinaChess.a==2){g.setColor(Color.yellow);g.fillRect(0,0,this.getBounds().width,this.getBounds().height);repaint();}elseif(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(inti=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(intj=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);}}打开保存的东西:
publicvoidshowBoardManul(){stepNumber=1;stackStep.clear();stackBack.clear();if(demoOne!=null)remove(demoOne);try{FileInputStreamfile_in=newFileInputStream(file);ObjectInputStreamobject_in=newObjectInputStream(file_in);demoOne=(ChessBoard)object_in.readObject();file_in.close();object_in.close();ChessPiece[]redPiece=demoOne.getRedPiece();ChessPiece[]blackPiece=demoOne.getBlackPiece();for(inti=0;i<redPiece.length;i++){MouseListener[]listener=redPiece[i].getMouseListeners();for(intk=0;k<listener.length;k++)redPiece[i].removeMouseListener(listener[k]);listener=blackPiece[i].getMouseListeners();for(intk=0;k<listener.length;k++)blackPiece[i].removeMouseListener(listener[k]);MouseMotionListener[]mr=redPiece[i].getMouseMotionListeners();for(intk=0;k<mr.length;k++)redPiece[i].removeMouseMotionListener(mr[k]);mr=blackPiece[i].getMouseMotionListeners();for(intk=0;k<mr.length;k++)blackPiece[i].removeMouseMotionListener(mr[k]);}step=demoOne.getStep();for(inti=step.size()-1;i>=0;i--){stackStep.push(step.get(i));}demoOne.remove(demoOne.cancel);restoreChessBoard(step);split.setRightComponent(newJScrollPane(demoOne));}catch(Exceptionexp){add(newJButton("不是棋谱文件"),BorderLayout.CENTER);}}ps:本人经过无限次测试,发现打开是没错的,就是保存那里不知道发生了什么事,一用drawImage就会报错,求答案!
解决方案
解决方案二:
请贴完整代码请贴异常堆栈
解决方案三:
请先学会结贴.