问候,
我正在尝试在非屏幕设备中获取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/