java - 无法创建 JFrame 的屏幕截图

标签 java swing jframe screenshot

我正在尝试使用 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/

相关文章:

java - CET 日期 : Unparseable date

Java : HttpClient 4. 1.2 : ConnectionTimeout, SocketTimeout 值设置无效

java - RLE序列,设置一个值

java - 使用回车键在java中激活一个按钮

java - 在 javafx 中更新 gridPane

java - 有没有办法更改 Jslider 的图标?

java - setMinimumSize() 不适用于 JButton

java - 在处理之前禁用框架

java - 从文本文件读取数据时在 JTable 中显示数据

java - 框架 2 位于框架 1 内