3

问候,

我正在尝试在非屏幕设备中获取 JFrame 绘图。JFrame 构造函数有一个

 JFrame(GraphicsConfiguration) 

似乎允许这样做:

我的第一次尝试是创建自己的 GraphicsConfiguration,当调用 getType() 时,他的 GraphicsDevice 报告了 GraphicsDevice.TYPE_IMAGE_BUFFER。

但是 JFrame.init 专门查找类型并在类型不是 TYPE_RASTER_SCREEN 时抛出异常:

    if (graphicsConfig.getDevice().getType() !=
        GraphicsDevice.TYPE_RASTER_SCREEN) {
        throw new IllegalArgumentException("not a screen device");
    }

接下来我尝试让我返回的 GraphicsDevice 报告 GraphicsDevice.TYPE_RASTER_SCREEN。这允许正确初始化 JFrame,但是当它显示它时,我得到了

Exception in thread "main" java.lang.ClassCastException: TestGraphicsConfiguration cannot be cast to sun.awt.X11GraphicsConfig

所以我已经没有想法了,关于如何绘制一个不会出现在屏幕上的 JFrame,但它的布局和功能从来都不是那么完整。

我在这里陷入了一个兔子洞,或者这可以做到吗?

4

1 回答 1

3

Java顶级容器(例如)JFrame需要访问主机平台本机的对等组件,通常通过 JNI。或者,您可以使用 a BufferedImageorjava.awt.headless模式,如此所述。

附录:

我想知道“任何人”是否可以取代如何选择同伴。

我不知道如何替换特定的对等组件,但可以调用特定于平台的原生组件;Java Native Access (JNA)就是这样一种途径。作为一个极端的例子,这个6502 JVM在 1 MHz 的 8 位处理器上以 128K 运行。演示,包括右下方屏幕截图的源代码javac,是使用.

于 2011-04-08T19:51:35.970 回答