我想让一个程序动态地显示桌面,但是出现问题,代码如下:import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;import javax.swing.JFrame;public class SnapShot extends JFrame {
private static BufferedImage image;
private static int serinal = 1; /**
 * Launch the application
 * 
 * @param args
 */
public static void main(String args[]) {
try {
final SnapShot frame = new SnapShot();
final Canvas c = new Canvas() { public void paint(Graphics g) {
super.paint(g);
g.drawImage(image, 0, 0, this); }
};
frame.getContentPane().add(c); new Thread() {
public void run() { while (true) {
Dimension d = Toolkit.getDefaultToolkit()
.getScreenSize();
try {
image = (new Robot())
.createScreenCapture(new Rectangle(0, 0,
(int) d.getWidth(), (int) d
.getHeight()));
// File f = new File("d:/temp/" + serinal + ".jpg");
// ImageIO.write(image, "jpg", f);
// serinal++;
c.repaint();
Thread.sleep(2000);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}.start(); frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
} /**
 * Create the frame
 */
public SnapShot() {
super();
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//
}}

解决方案 »

  1.   

    就是每隔一段时间截一次图,然后将图显示到一个Canvas上,
    但是做不出想要的效果
      

  2.   

    根据楼主需求描述将你的代码做了大体修改,不知是否符合你的实际需求,楼主可直接运行试试package demo;import java.awt.AWTException;
    import java.awt.Canvas;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Rectangle;
    import java.awt.Robot;
    import java.awt.Toolkit;
    import java.awt.image.BufferedImage;import javax.swing.JFrame;public class SnapShot extends JFrame implements Runnable {
    private BufferedImage image; private static int serinal = 1; private myCanvas c; /**
     * Launch the application
     * 
     * @param args
     */
    public static void main(String args[]) {
    SnapShot frame = new SnapShot();
    frame.creatImage(frame);
    } public void creatImage(SnapShot frame) {
    try {
    c = new myCanvas();
    frame.getContentPane().add(c);
    Thread mthread = new Thread(frame);
    mthread.start();
    frame.setVisible(true);
    } catch (Exception e) {
    e.printStackTrace();
    }
    } public void run() { while (true) { try { c.repaint();
    Thread.sleep(2000);
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    }
    } class myCanvas extends Canvas {
    public void paint(Graphics g) {
    super.paint(g);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    try {
    image = (new Robot()).createScreenCapture(new Rectangle(0, 0,
    (int) d.getWidth(), (int) d.getHeight()));
    } catch (AWTException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    }
    g.drawImage(image, 0, 0, this); }
    } /**
     * Create the frame
     */
    public SnapShot() {
    super();
    setBounds(100, 100, 500, 375);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //
    }}