问候,

我正在尝试在非屏幕设备中获取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并没有在屏幕上显示出来,但从来没有那么完整地布局和发挥作用的想法已经用尽了。

是要在这里钻兔子洞吗,还是可以做到这一点?

最佳答案

Java top-level container(例如 JFrame )通常需要通过JNI访问主机平台固有的peer component。另外,您可以使用 BufferedImage java.awt.headless模式。

附录:

我想知道“任何人”是否都可以代替同行的选择。

我不知道如何替换特定的对等组件,但是有可能唤起特定于平台的本机组件。 here就是这样一种途径。作为一个极端示例,此Java Native Access (JNA)在以1 MHz运行的8位处理器上以128K运行。使用javac编译了演示,包括右下方屏幕截图的6502 JVM

关于java - 在非光栅图形配置中显示JFrame,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5599215/

10-13 03:35