希望有高手帮我调试出来,
我现在还没有调试好JAVA捕获屏幕、屏幕录像、播放
//记录屏幕、类似录像
package net.wnetw.project.media;import java.awt.*;
import java.awt.image.*;
import com.sun.image.codec.jpeg.*;
import java.io.*;public class WnetWScreenRecorder extends Thread{  private Dimension screenSize;
  private Rectangle rectangle;
  private Robot robot;
  private long i = 0;
  private JPEGImageEncoder encoder;  public WnetWScreenRecord() {
    screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    rectangle = new Rectangle(screenSize);//可以指定捕获屏幕区域
    try{
      robot = new Robot();
    }catch(Exception e){
      e.printStackTrace();
      System.out.println(e);
    }
  }  public static void main(String[] args) {
    new WnetWScreenRecord().start();
  }  public void run(){
    FileOutputStream fos = null;
    while (true){
      try{
        BufferedImage image = robot.createScreenCapture(rectangle);//捕获制定屏幕矩形区域
        fos = new FileOutputStream("C:\\records\\" + i + ".jpg");
        JPEGCodec.createJPEGEncoder(fos).encode(image);//图像编码成JPEG
        fos.close();
        i = i + 1;
        Thread.sleep(40);//每秒25帧
      }catch(Exception e){
        e.printStackTrace();
        System.out.println(e);
        try{
          if (fos != null)fos.close();
        }catch(Exception e1){}
      }
    }
  }
}
//播放屏幕录像package net.wnetw.project.media;import java.awt.*;
import javax.swing.*;
import java.io.*;public class WnetWScreenRecordPlayer extends JFrame{
  BorderLayout borderLayout1 = new BorderLayout();
  Dimension screenSize;  public WnetWScreenRecordPlayer() {
super();
    screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    this.setSize(screenSize);
    Screen p = new Screen();
    Container c = this.getContentPane();
    c.setLayout(borderLayout1);
    c.add(p,"Center");
    new Thread(p).start();
    this.show();
  }  public static void main(String[] args){
    new WnetWScreenRecordPlayer();
  }}class Screen extends JPanel implements Runnable{
  private BorderLayout borderLayout1 = new BorderLayout();
  private Image cimage;  public void run(){
int i = 0;
    while(true){
      try{
        cimage = loadImage(i + ".jpg");
        i = i + 1;
        repaint();
        Thread.sleep(40);//与录像时每秒帧数一致      }catch(Exception e){
        e.printStackTrace();
        System.out.println(e);
      }
    }
  }  public Image loadImage(String name) {
    Toolkit tk = Toolkit.getDefaultToolkit();
    Image image = null;
    image = tk.getImage("C:/records/" + name);
    MediaTracker mt = new MediaTracker(this);
    mt.addImage(image, 0);
    try {
      mt.waitForID(0);
    }catch (Exception e) {
      e.printStackTrace();
      System.out.println(e);
    }
    return image;
  }  public Screen() {
    super();
    this.setLayout(null);
  }  public void paint(Graphics g){
    super.paint(g);
    Graphics2D g2 = (Graphics2D) g;
    g2.drawImage(cimage, 0, 0, null);
  }
}

解决方案 »

  1.   

    Robot捕获视频好像只能每秒10次,达不到每秒25帧。
      

  2.   

    很无聊啊!//记录屏幕、类似录像 
    package chapter08;import javax.swing.*;
    import java.awt.*;
    import java.awt.image.*;
    import com.sun.image.codec.jpeg.*;
    import java.io.*;public class WnetWScreenRecorder extends Thread { private Dimension screenSize;
    private Rectangle rectangle;
    private Robot robot;
    private long i = 0;
    @SuppressWarnings("unused")
    private JPEGImageEncoder encoder;    public  WnetWScreenRecorder() {
    screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    rectangle = new Rectangle(screenSize);// 可以指定捕获屏幕区域
    try {
    robot = new Robot();
    } catch (Exception e) {
    e.printStackTrace();
    System.out.println(e);
    }
    } public static void main(String[] args) {
    new WnetWScreenRecorder().start();
    } public void run() {
    FileOutputStream fos = null;
    while (true) {
    try {
    BufferedImage image = robot.createScreenCapture(rectangle);// 捕获制定屏幕矩形区域
    fos = new FileOutputStream("C:\\records\\" + i + ".png");
    JPEGCodec.createJPEGEncoder(fos).encode(image);// 图像编码成JPEG
    fos.close();
    i = i + 1;
    Thread.sleep(25);// 每秒25帧
    } catch (Exception e) {
    e.printStackTrace();
    System.out.println(e);
    try {
    if (fos != null)
    fos.close();
    } catch (Exception e1) {
    }
    }
    }
    }
    }
    //记录屏幕、类似录像 
    package chapter08;import javax.swing.*;
    import java.awt.*;
    import java.awt.image.*;
    import com.sun.image.codec.jpeg.*;
    import java.io.*;public class WnetWScreenRecorder extends Thread { private Dimension screenSize;
    private Rectangle rectangle;
    private Robot robot;
    private long i = 0;
    @SuppressWarnings("unused")
    private JPEGImageEncoder encoder;    public  WnetWScreenRecorder() {
    screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    rectangle = new Rectangle(screenSize);// 可以指定捕获屏幕区域
    try {
    robot = new Robot();
    } catch (Exception e) {
    e.printStackTrace();
    System.out.println(e);
    }
    } public static void main(String[] args) {
    new WnetWScreenRecorder().start();
    } public void run() {
    FileOutputStream fos = null;
    while (true) {
    try {
    BufferedImage image = robot.createScreenCapture(rectangle);// 捕获制定屏幕矩形区域
    fos = new FileOutputStream("C:\\records\\" + i + ".png");
    JPEGCodec.createJPEGEncoder(fos).encode(image);// 图像编码成JPEG
    fos.close();
    i = i + 1;
    Thread.sleep(25);// 每秒25帧
    } catch (Exception e) {
    e.printStackTrace();
    System.out.println(e);
    try {
    if (fos != null)
    fos.close();
    } catch (Exception e1) {
    }
    }
    }
    }
    }
    //记录屏幕、类似录像 
    package chapter08;import javax.swing.*;
    import java.awt.*;
    import java.awt.image.*;
    import com.sun.image.codec.jpeg.*;
    import java.io.*;@SuppressWarnings("serial")
    // 播放屏幕录像public class WnetWScreenRecordPlayer extends JFrame {
    BorderLayout borderLayout1 = new BorderLayout();
    Dimension screenSize; public WnetWScreenRecordPlayer() {
    super();
    screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    this.setSize(screenSize);
    Screen p = new Screen();
    Container c = this.getContentPane();
    c.setLayout(borderLayout1);
    c.add(p, "Center");
    new Thread(p).start();
    this.setVisible(true);
    } public static void main(String[] args) {
    new WnetWScreenRecordPlayer();
    }}
      

  3.   

     import com.sun.image.codec.jpeg.*; 应该使用 javax.imageio.ImageIO 类替换掉。