惭愧、惭愧!此程序是我从JAVA中文站(java-cn.net)上看到的,并非原创。刚好你要,刚好我又
有,就粘上来给你吧!**********************************************************************************
import java.awt.*; 
import java.awt.image.*; 
import com.sun.image.codec.jpeg.*; 
class ImageCanvas extends Canvas{ 
private Image image; 
private Dimension prefSize; 
public ImageCanvas(Image image){ 
this.image = image; 
calculatePreferredSize(); 

public void setImage(Image image){ 
this.image = image; 
calculatePreferredSize(); 
repaint(); 

private void calculatePreferredSize(){ 
prefSize = new Dimension(image.getWidth(this),image.getHeight(this)); 
System.out.println(image.getWidth(this)); 
setSize(prefSize); 

public Dimension getPreferredSize() { 
return prefSize; 

public Dimension getMinimumSize() { 
return prefSize; 

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

public void paint(Graphics g){ 
g.drawImage(image,0,0,null); 


class ImageUtils{ 
public static Image getScreenImage(){ 
Robot robot; 
try { 
robot = new Robot(); 
}catch(Exception e) { 
throw new RuntimeException("unable to construct Robot"); 

Dimension screenDims =Toolkit.getDefaultToolkit().getScreenSize(); 
Image screen =robot.createScreenCapture(new Rectangle(450,350,screenDims.width,screenDims.height)).getScaledInstance(400,300,Image.SCALE_SMOOTH); 
MediaTracker tracker =new MediaTracker(new Label()); 
tracker.addImage(screen,1); 
try { 
tracker.waitForID(0); 
}catch(InterruptedException e) { /** ... */ } 
return screen; 


public class ScreenCapture extends Frame{ 
private ImageCanvas canvas =new ImageCanvas(ImageUtils.getScreenImage()); 
public ScreenCapture(){ 
add(canvas); 
setSize(400,300); 
setVisible(true); 
Thread imageThread =new UpdateThread(); 
imageThread.setDaemon(true); 
imageThread.start(); 

class UpdateThread extends Thread{ 
public void run(){ 
while(true){ 
try { 
Thread.currentThread().sleep(1000); 

catch (Exception ex) { 

canvas.setImage(ImageUtils.getScreenImage()); 
validate(); 



public static void main(String[] args){ 
new ScreenCapture(); 

}
********************************************************************************** 

解决方案 »

  1.   

    我想我还是再给你加些别的功能吧!1.抓图时显示鼠标,这个我没有实现。
    http://expert.csdn.net/Expert/topic/1927/1927244.xml?temp=.48444772.存储(已经具体压缩的能力)
    public class ImageTest {    public ImageTest() {
        }
        public static void main(String[] args) throws Exception{
            ImageTest imageTest1 = new ImageTest();
            File file=new File("Screen.jpg");
            
            java.awt.Robot robot=new java.awt.Robot();
            BufferedImage buffer=robot.createScreenCapture(new Rectangle(0,0,800,600)) ; 
            System.out.println("create ObjectOutputStream is ok!");
            
            //-------------------测试 
            BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(file));        ImageIO.write(buffer,"JPEG",bos);
            ImageIO.createImageOutputStream(bos);
        }
    }
    3.压缩
    216.Screen Shot 屏幕抓图 import java.util.*;
     import java.io.*;
     import java.awt.Robot;
     import java.awt.*;
     import com.sun.image.codec.jpeg.*;
     import java.awt.image.*;public class ScreenShot {    public ScreenShot() {
        }
        public static void main(String[] args) throws Exception{
            BufferedImage screenshot = (new Robot()).createScreenCapture(new Rectangle(0,0,800,600)) ; 
            //以上rectangle(0,0,800,600)中,你可以用Toolkit取得当前屏幕大小。
            OutputStream out = new BufferedOutputStream(new FileOutputStream ("ScreenShot.jpg")) ; 
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out) ; 
            encoder.encode(screenshot) ; 
            out.close() ; 
        }
    }