Java AWT 包中的 Robot 類提供了模擬鍵盤鼠標操作與屏幕捕獲能力。本文詳細講解如何利用 Robot.createScreenCapture() 實現全屏截圖,並封裝為可復用的 ScreenCapture 工具類,支援 PNG/JPG 格式、自定義文件名前綴與序號自增。
Toolkit.getDefaultToolkit().getScreenSize():獲取屏幕分辨率 (寬、高)。new Robot().createScreenCapture(Rectangle):按指定矩形區域捕獲屏幕像素,返回 BufferedImage。ImageIO.write(image, format, file):將圖像編碼寫入文件,支援 "png"、"jpg"、"bmp" 等格式。import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ScreenCapture {
private final String prefix;
private final String format;
private final Dimension screenSize;
private int serial = 0;
public ScreenCapture() {
this("ScreenShot", "png");
}
public ScreenCapture(String prefix, String format) {
this.prefix = prefix;
this.format = format.toLowerCase();
this.screenSize = Toolkit.getDefaultToolkit().getScreenSize();
}
/** 執行截圖並保存 */
public File snapShot() throws AWTException, IOException {
// 1. 捕獲全屏
Rectangle bounds = new Rectangle(0, 0, screenSize.width, screenSize.height);
BufferedImage screenshot = new Robot().createScreenCapture(bounds);
// 2. 生成文件名
serial++;
String fileName = String.format("%s_%03d.%s", prefix, serial, format);
File output = new File(fileName);
// 3. 寫入文件
ImageIO.write(screenshot, format, output);
System.out.println("Saved: " + output.getAbsolutePath());
return output;
}
/** 批量截圖示例 */
public static void main(String[] args) {
try {
ScreenCapture cap = new ScreenCapture("D:/demo/shot", "png");
for (int i = 0; i < 3; i++) {
cap.snapShot();
Thread.sleep(1000); // 間隔 1 秒
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Robot 構造可能拋出 AWTException (無顯示設備/權限不足);ImageIO.write 可能拋出 IOException。getScreenSize() 僅返回主屏幕尺寸。多顯示器需使用 GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices() 遍歷所有屏幕邊界。-Dsun.java2d.uiScale=1.0 或配置清單文件聲明 DPI 感知。Robot 實例與 Rectangle 對象,避免重複創建。Java Robot 類提供了跨平台的原生屏幕捕獲能力,配合 ImageIO 即可構建輕量級截圖工具。掌握其核心 API 與常見坑點 (多屏、高 DPI、權限),即可在自動化測試、監控錄製、輔助工具開發中靈活應用。