给你提供一个思路吧,运行一下这个例子
--------
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();