日期:2014-05-20  浏览次数:21087 次

关于java applet 图片处理的问题,请高手帮下忙!
程序运行报 java.io.StreamCorruptedException: invalid stream header: FFD8FFE0 错误!
运行welcome.java报错,请问怎么处理呢?
程序代码:
Java code

import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Choice;
import java.awt.Color;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Vector;
import javax.swing.JColorChooser;
public class paintboard extends Frame implements ActionListener,MouseMotionListener,MouseListener,ItemListener
{
 int x = -1, y = -1;
 int con = 1;//画笔大小
 int Econ = 5;//橡皮大小
 int toolFlag = 0;//toolFlag:工具标记
 Color c = new Color(0,0,0); //画笔颜色
 BasicStroke size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);//画笔粗细
 Point cutflag = new Point(-1, -1, c, 6, con);//截断标志
 Vector paintInfo = null;//点信息向量组
 int n = 1;
 FileInputStream picIn = null;
 FileOutputStream picOut = null;
 ObjectInputStream VIn = null;
 ObjectOutputStream VOut = null;
 Panel toolPanel;
 Button eraser, drLine,drCircle,drRect;
 Button clear ,pen;
 Choice ColChoice,SizeChoice,EraserChoice;
 Button colchooser;
 Label 颜色,大小B,大小E;
 Button openPic,savePic;
 FileDialog openPicture,savePicture;
  paintboard(String s)
 { 
  super(s);
  addMouseMotionListener(this);
  addMouseListener(this);
  paintInfo = new Vector();
  ColChoice = new Choice();
  ColChoice.add("black");
  ColChoice.add("red");
  ColChoice.add("blue");
  ColChoice.add("green");
  ColChoice.addItemListener(this);
  SizeChoice = new Choice();
  SizeChoice.add("1");
  SizeChoice.add("3");  
  SizeChoice.add("5");
  SizeChoice.add("7");
  SizeChoice.add("9");
  SizeChoice.addItemListener(this);
  EraserChoice = new Choice();
  EraserChoice.add("5");
  EraserChoice.add("9");
  EraserChoice.add("13");
  EraserChoice.add("17");
  EraserChoice.addItemListener(this);
  toolPanel = new Panel();
  clear = new Button("清除");
  eraser = new Button("橡皮");
  pen = new Button("画笔");
  drLine = new Button("画直线");
  drCircle = new Button("画圆形");
  drRect = new Button("画矩形");
  openPic = new Button("打开图画");
  savePic = new Button("保存图画");
  colchooser = new Button("显示调色板");
  clear.addActionListener(this);
  eraser.addActionListener(this);
  pen.addActionListener(this);
  drLine.addActionListener(this);
  drCircle.addActionListener(this);
  drRect.addActionListener(this);
  openPic.addActionListener(this);
  savePic.addActionListener(this);
  colchooser.addActionListener(this);
  颜色 = new Label("画笔颜色",Label.CENTER);
  大小B = new Label("画笔大小",Label.CENTER);
  大小E = new Label("橡皮大小",Label.CENTER);
  //面板添加组件
  toolPanel.add(openPic);
  toolPanel.add(savePic);
  toolPanel.add(pen);
  toolPanel.add(drLine);
  toolPanel.add(drCircle);
  toolPanel.add(drRect);
  toolPanel.add(颜色); toolPanel.add(ColChoice); 
  toolPanel.add(大小B); toolPanel.add(SizeChoice);
  toolPanel.add(colchooser);
  toolPanel.add(eraser);
  toolPanel.add(大小E); toolPanel.add(EraserChoice);
  toolPanel.add(clear);
  add(toolPanel,BorderLayout.NORTH);
  setBounds(60,60,900,600); setVisible(true);
  validate();
  openPicture = new FileDialog(this,"打开图画",FileDialog.LOAD);
  openPicture.setVisible(false);
  savePicture = new FileDialog(this,"保存图画",FileDialog.SAVE);
  savePicture.setVisible(false);
  openPicture.addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)
   { openPicture.setVisible(false); }
  });
  savePicture.addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)
   { savePicture.setVisible(false); }
  });
  addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)
   { System.exit(0);}
  });
 
  
 }
 public void paint(Graphics g)
 {
  Graphics2D g2d = (Graphics2D)g;
  Point p1,p2;
  n = paintInfo.size();  
  if(toolFlag==2)
    g.clearRect(0,0,getSize().width,getSize().height);//清除

  for(int i=0; i<n-1; i++)
  {
   p1 = (Point)paintInfo.elementAt(i);
   p2 = (Point)paintInfo.elementAt(i+1);
   size = new BasicStroke(p1.boarder,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
      g2d.setColor(p1.col);
   g2d.setStroke(size);

  if(p1.tool==p2.tool)
   {
   switch(p1.tool)
   {
    case 0://画笔
      Line2D line1 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y);
      g2d.draw(line1);      
     break;

    case 1://橡皮
      g.clearRect(p1.x, p1.y, p1.boarder, p1.boarder);
     break;

    case 3://画直线
      Line2D line2 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y);
      g2d.draw(line2);
     break;

    case 4://画圆
       Ellipse2D ellipse = new Ellipse2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y));
       g2d.draw(ellipse);
     break;

    case 5://画矩形
       Rectangle2D rect = new Rectangle2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y));
       g2d.draw(rect);
     break;

    case 6://截断,跳过
      i=i+1;
     break;

    default :
   }//end switch
   }//end if
  }//end for
 }
 public void itemStateChanged(ItemEvent e)
 {
  if(e.getSource()==ColChoice)//预选颜色
  {
   String name = ColChoice.getSelectedItem();
   
   if(name=="black")
   { c = new Color(0,0,0); }
   else if(name=="red")
   { c = new Color(255,0,0); }
   else if(name=="green")
   { c = new Color(0,255,0); }
   else if(name=="blue")
   { c = new Color(0,0,255); }
  }
  else if(e.getSource()==SizeChoice)//画笔大小
  {
   String selected = SizeChoice.getSelectedItem();
   
   if(selected=="1")
   { 
    con = 1; 
    size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);

   }
   else if(selected=="3")
   { 
    con = 3; 
    size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);

   }
   else if(selected=="5")
   { con = 5; 
    size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);

   }
   else if(selected=="7")
   { con = 7; 
    size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);

   }
   else if(selected=="9")
   { con = 9; 
    size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);

   }
  }
  else if(e.getSource()==EraserChoice)//橡皮大小
  {
   String Esize = EraserChoice.getSelectedItem();

   if(Esize=="5")
   {  Econ = 5*2; }
   else if(Esize=="9")
   {  Econ = 9*2; }
   else if(Esize=="13")
   {  Econ = 13*2; }
   else if(Esize=="17")
   {  Econ = 17*3; }

  }

 }
 public void mouseDragged(MouseEvent e)
 {
  Point p1 ;
  switch(toolFlag){
   case 0://画笔
     x = (int)e.getX(); 
     y = (int)e.getY();
     p1 = new Point(x, y, c, toolFlag, con);
     paintInfo.addElement(p1);
     repaint();
     break;

   case 1://橡皮
     x = (int)e.getX(); 
     y = (int)e.getY();
     p1 = new Point(x, y, null, toolFlag, Econ);
     paintInfo.addElement(p1);
     repaint();
     break;

   default :
  }
 }

 public void mouseMoved(MouseEvent e) {}

 public void update(Graphics g)
 {
  paint(g);
 }

 public void mousePressed(MouseEvent e) 
 { 
  Point p2;
  switch(toolFlag){
   case 3://直线
     x = (int)e.getX(); 
     y = (int)e.getY();
     p2 = new Point(x, y, c, toolFlag, con);
     paintInfo.addElement(p2);
     break;

   case 4: //圆
     x = (int)e.getX(); 
     y = (int)e.getY();
     p2 = new Point(x, y, c, toolFlag, con);
     paintInfo.addElement(p2);
     break;

   case 5: //矩形
     x = (int)e.getX(); 
     y = (int)e.getY();
     p2 = new Point(x, y, c, toolFlag, con);
     paintInfo.addElement(p2);
     break;

   default :
  } 
 }