我正在尝试使用 Java 截取屏幕截图,我有以下代码:
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
public class Visualizer {
public static final void makeScreenshot(JFrame argFrame) {
Rectangle rec = argFrame.getBounds();
BufferedImage bufferedImage = new BufferedImage(rec.width, rec.height,
BufferedImage.TYPE_INT_ARGB);
argFrame.paint(bufferedImage.getGraphics());
try {
// Create temp file.
File temp = File.createTempFile("screenshot", ".png");
// Use the ImageIO API to write the bufferedImage to a temporary file
ImageIO.write(bufferedImage, "png", temp);
// Delete temp file when program exits.
temp.deleteOnExit();
} catch (IOException ioe) {
} // catch
}
public static void main(String[] args) {
JFrame window = new JFrame();
makeScreenshot(window);
}
}
但它抛出异常:
Exception in thread "main" java.lang.IllegalArgumentException: Width (0) and height (0) cannot be <= 0
最佳答案
问题是你的框架尺寸返回0。当你调用rec.width()
时。它返回0。高度相同。但是如果你调用setVisible(true)
> 那么矩形具有正确的值。实际上您的矩形是空矩形。java.awt.Rectangle[x=0,y=0,width=0,height=0]
解决这个问题;
调用setVisible(true)
JFrame window = new JFrame();
window.setVisible(true);
makeScreenshot(window);
如果您调用
JFrame window = new JFrame();
window.pack();
makeScreenshot(window);
它也有效
关于java - 无法创建 JFrame 的屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31111253/