java - 在非光栅图形配置中显示 JFrame

标签 java swing off-screen

问候,

我正在尝试在非屏幕设备中获取 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需要访问 peer component原生于主机平台,通常通过 JNI。或者,您可以使用 BufferedImagejava.awt.headless 模式,如讨论 here .

附录:

I wonder if "any human" can replace how peers are selected.

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

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

相关文章:

javascript - 在屏幕外的文本上使用 javascript 替换

c# - 如何阻止我的角色离开屏幕?

java - 编译器错误 : reference to call ambiguous

java - 我需要有关 Java JFrame 的一些帮助

javascript - jquery 工具提示应该在屏幕外时改变位置

java - Swing - 如何更改 Jframe/Jdialog 的背景颜色

java - Java动态添加ImageIcon

java - 使用泛型删除未经检查的转换警告

java - GORM 属性和 Postgres 字段是域数据类型

java - 什么是NullPointerException,我该如何解决?