先是主类里面的保存函数
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就会报错,求答案!
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就会报错,求答案!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货