Java 如何使用setVisible(false)从JFrame创建图像?

Java 如何使用setVisible(false)从JFrame创建图像?,java,jframe,bufferedimage,Java,Jframe,Bufferedimage,我创建了一个JFrame,它通过一些计算基本上创建了一个网格,我需要从中获得一个图像,我目前正在使用: public static BufferedImage createImageFromFrame(Component component) { int w = component.getWidth(); int h = component.getHeight(); BufferedImage image = new BufferedImage(w,h,BufferedI

我创建了一个JFrame,它通过一些计算基本上创建了一个网格,我需要从中获得一个图像,我目前正在使用:

public static BufferedImage createImageFromFrame(Component component) {
    int w = component.getWidth();
    int h = component.getHeight();
    BufferedImage image = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
    component.paint( image.getGraphics() );
    return image;
}
打电话的方式如下:

JFrame window = new JFrame();
// set stuff
BufferedImage img = d.createImageFromFrame(window.getContentPane());
这很好。但是现在我想从不同的帧创建多个图像,我不想每个图像都出现在屏幕上,我只想从它们生成图像。
但是我注意到我不能使用
setVisible(false)
因为它给出了一个
java.lang.IllegalArgumentException:Width(0)和height(0)不能打包框架并将其移动到显示器的可见区域之外。例如:

frame.pack();
frame.setLocation(-2000, -2000);
frame.setVisible(true);
// There you go, the frame won't be visible

哈哈,我不知道我怎么没想到。很简单,非常感谢(8分钟后接受)好的,但我没有注意到,虽然它没有真正显示帧,但它们显然仍然在Alt选项卡上可见,这看起来并不优雅。有没有什么方法可以完全去掉框架,只从中获取图像?您可以使用
JWindow
而不是
JFrame
JWindow
s在任务栏上和任务列表上都不可见。我现在不需要它,但下次我将尝试
JWindows
。非常感谢@icza。