前几天在chinajavaworld上看到过一个类似的东东!而且捕捉之后用socket来传输!不过今天chinajavaworld不能上!先把两个主要的类给你你自己看看吧!
package simage;//自定义的图像序列化包
import java.awt.*;
import java.awt.image.*;
import java.beans.*;
import java.io.*;
public class MyImage  extends Canvas  implements java.io.Serializable {  private transient Image image;
  private int width;
  private int height;
  private Dimension mySize = new Dimension();  public MyImage() {
    image = null;
  }  public MyImage(File ImageFile) {
   this();
   setImage(ImageFile);
  }
//////////
//////////
  public MyImage(Image img)
  {
    try {
     image = loadImage(img);
    }
    catch (InterruptedException e) {
      image = null;
    }
    if(image!=null)
    { mySize = new Dimension(image.getWidth(this), image.getHeight(this));}
  }  private Image loadImage(Image img) throws InterruptedException {
   Image im=img;
   MediaTracker mt = new MediaTracker(this);
   mt.addImage (im,0);
   mt.waitForAll();
    if (mt.isErrorAny()) {
       return null;
     }
     else {
       return im;
     }
  }//////////
////////// public Dimension getImageSize() { return mySize; }//返回图像大小
 public Image  getImage(){return image;}//返回图像(无论是网络传输的还是本地读的)//自定义序列化写图像
  private void writeObject(ObjectOutputStream stream) throws java.io.IOException {
    stream.defaultWriteObject(); // 写 non-transient, non-static 数据
    PixelGrabber grabber = new PixelGrabber(image, 0,0, -1, -1, true);    try {
      grabber.grabPixels();
        }
    catch (InterruptedException e) { }    Object pix = grabber.getPixels();
    Dimension dim = new Dimension(image.getWidth(this), image.getHeight(this));
    stream.writeObject(dim);
    stream.writeObject(pix);
    }
//自定义序列化读图像
  private void readObject(ObjectInputStream stream) throws java.io.IOException {
    try {
      stream.defaultReadObject(); // 读 non-transient, non-static 数据
      Dimension dim = (Dimension)stream.readObject();
      Object img = stream.readObject();
      int [] pix = (int [])img;
      image = createImage(new MemoryImageSource(dim.width, dim.height,  pix, 0, dim.width));
    }
    catch (ClassNotFoundException e) {
      throw new java.io.IOException();
    }
  }  private void setImage(File file) {
    try {
     image = readImage(file);
    }
    catch (InterruptedException e) {
      image = null;
    }
    if (image != null) {
      mySize = new Dimension(image.getWidth(this), image.getHeight(this));
       }
  }
  private Image readImage(File file) throws InterruptedException {
    return readImage(file.toString());
  }
  private Image readImage(String name) throws InterruptedException {
    Image im;
    MediaTracker mt = new MediaTracker(this);
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    im = toolkit.getImage(name);
    mt.addImage (im,0);
    mt.waitForAll();
      if (mt.isErrorAny()) {
        return null;
      }
      else {
        return im;
      }
  }
}

解决方案 »

  1.   

    //捕获当前屏幕并向Server网络传输.
    import java.awt.image.*;
    import javax.swing.event.*;
    import java.io.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.image.BufferedImage;
    import java.awt.*;
    import java.net.*;
    import simage.*;
    import com.sun.image.codec.jpeg.*;
    import java.util.zip.*;
    import java.net.Socket;
    public class Capture extends JFrame {
       public static Image img1= null;
       int x=0,y=0;
       Dimension screenDims =Toolkit.getDefaultToolkit().getScreenSize();
       Robot r = null;
       JButton but;    GZIPSocket sst1;
       public Capture()
       {
           getContentPane().setLayout(new BorderLayout());
           try { r = new Robot(); }
           catch(Exception e) {}       but = new JButton("Capture");
           but.setBounds(10,10,100,25);
           try {
         jbInit();
       }
       catch(Exception e) {
         e.printStackTrace();
        }
           but.addActionListener(new ActionListener() {
               public void actionPerformed(ActionEvent e) {
    frequency fy=new frequency();
    fy.frequency1(sst1);
    Thread threadfy=new Thread(fy);
    threadfy.start();
               }
           } );//but event is end;      getContentPane().add(but,BorderLayout.NORTH);
       }  /* public void paint(Graphics g) {
           super.paint(g);
           if (img != null) {           //g.drawImage(img,0,0,screenDims.width,screenDims.height,this);           Icon icon=new ImageIcon(img);
               jlabel.setIcon(icon);
           }
       }*/   public static void main(String argv[]) {
           Capture frame = new Capture();
           frame.addWindowListener(new WindowAdapter(){
               public void windowClosing(WindowEvent e) {
                   System.exit(0);
               }
           } );
           frame.setBounds(0,0,400,400);
           frame.setVisible(true);
       }
      private void jbInit() throws Exception {
        this.addWindowListener(new java.awt.event.WindowAdapter() {
          public void windowClosing(WindowEvent e) {
            this_windowClosing(e);
          }
        });
      }  void this_windowClosing(WindowEvent e) {
    System.exit(0);
      }
    }
    class frequency extends Capture implements Runnable{
      private JScrollPane jScrollPane1 = new JScrollPane();
       private JLabel jlabel = new JLabel();
      public void frequency1(GZIPSocket st){
        sst1=st;  } /* public void paint(Graphics g) {
           super.paint(g);
           if (img1!= null) {       g.drawImage(img1,0,0,screenDims.width,screenDims.height,this);         //  Icon icon=new ImageIcon(img1);
              // jlabel.setIcon(icon);
           }
       }*/
      public void run(){
        ObjectOutputStream out=null;
        BufferedImage img1=null;
        MyImage myimage=null;  int i=0;
      int j=0;
      int m=1;
     /* try{sst1=new GZIPSocket("127.0.0.1",8080);
      }
      catch(Exception e){}*/
      while(true){
          img1=r.createScreenCapture(new Rectangle(0,0,screenDims.width,screenDims.height));
    m++;//r.delay(10);
    //      SaveImage si=new SaveImage(img1,j);
     System.out.println(m);
    j++;
    //this.repaint();try{  sst1=new GZIPSocket("202.203.215.117",8080);
        //System.out .println(" connect  to server 202.203.215.117  on 8080...1");
       GZIPOutputStream gos=(GZIPOutputStream)sst1.getOutputStream();   out=new ObjectOutputStream(gos);
       myimage=new MyImage((Image)img1);
      //System.out .println("开始向网络中写第 "+(++i)+" 个Image 对象...") ;
          // System.out .println("要写的Image 宽="+myimage.getImageSize().width+"  高="+myimage.getImageSize().height  ) ;
       out.writeObject(myimage);
         out.close();   try{
         Thread.currentThread().sleep(1);
        }catch(Exception e){}     }  // catch(IOException e2){}
           catch(Exception e3){}
      }}}class GZIPSocket extends Socket {        private InputStream in;
            private OutputStream out;        public GZIPSocket() {
             super();
            }        public GZIPSocket(String host, int port) throws IOException {
                    super(host, port);           }        public InputStream getInputStream() throws IOException {
                     if (in == null) {
                            in = new GZIPInputStream(super.getInputStream());
                    }
                    return in;           }         public OutputStream getOutputStream() throws IOException {
                    if (out == null) {
                            out = new GZIPOutputStream(super.getOutputStream());                   }
                    return out;
             }         public synchronized void close() throws IOException {               GZIPOutputStream o = (GZIPOutputStream)getOutputStream();               o.flush();               super.close();
            }
    }