Java 为自定义驱动程序创建图形设备

Java 为自定义驱动程序创建图形设备,java,swing,user-interface,headless,Java,Swing,User Interface,Headless,我正在一个嵌入式系统中使用Java的项目中工作。我有用于屏幕和触摸输入的驱动程序,以及用于文本输入的虚拟键盘。我的屏幕驱动程序有一个Graphics2D对象,您可以在其中绘制,还有一个repaint(矩形)更新方法。类似地,触摸驱动程序能够为监听器生成MouseEvents 现在我正在直接在屏幕上绘图。这很好,但我真正想要的是允许库的用户创建JFrame并使用普通Swing元素。但是,默认的GraphicsEnvironment是headless,因为Java看不到myEInkDriver类或m

我正在一个嵌入式系统中使用Java的项目中工作。我有用于屏幕和触摸输入的驱动程序,以及用于文本输入的虚拟键盘。我的屏幕驱动程序有一个
Graphics2D
对象,您可以在其中绘制,还有一个
repaint(矩形)
更新方法。类似地,触摸驱动程序能够为监听器生成
MouseEvents

现在我正在直接在屏幕上绘图。这很好,但我真正想要的是允许库的用户创建JFrame并使用普通Swing元素。但是,默认的GraphicsEnvironment是headless,因为Java看不到my
EInkDriver
类或my
TouchDriver

我知道有很多方法可以调用组件的
paint
方法来获取图像;但是,在绘制
容器时,这会出现问题,我还想向用户提供
图形配置
,以便他们可以编写类似
JFrame frame=newjframe(getEInkGraphicsConfiguration())的内容并继续,就像他们正在编写桌面Swing应用程序一样


考虑到我已经拥有的这些功能,我将如何创建一个
GraphicsDevice
GraphicsEnvironment
,使我能够在我的项目中使用Swing?

我对抽象类进行了非常简短的研究,并猜测,可能会派生出自己的类,然后使用“java.awt.graphicsenv”第64行的键来注册它

幸运的是,有一个抽象类,代码很少


之后

GraphicsEnvironment中的以下代码显示:

  • 用于无头或不用于无头的系统属性(您可以设置)
  • 将显示环境设置
  • 也许你可以使用这些信息

                            String osName = System.getProperty("os.name");
                            if (osName.contains("OS X") && "sun.awt.HToolkit".equals(
                                    System.getProperty("awt.toolkit")))
                            {
                                headless = defaultHeadless = Boolean.TRUE;
                            } else {
                                headless = defaultHeadless =
                                    Boolean.valueOf(("Linux".equals(osName) ||
                                                     "SunOS".equals(osName) ||
                                                     "FreeBSD".equals(osName) ||
                                                     "NetBSD".equals(osName) ||
                                                     "OpenBSD".equals(osName)) &&
                                                     (System.getenv("DISPLAY") == null));
                            }
    

    感谢您的快速响应,但我对“派生自己的类”的细节更感兴趣。如果我可以派生该类,那么我可以通过调用
    JFrame(GraphicsConfiguration)
    来使用它。然而,我被困在如何实际派生那个类的问题上。我想覆盖
    图形设备。getFullScreenWindow()
    ,但如果没有
    图形环境,我无法创建
    窗口
    ,这给我留下了一个鸡和蛋的问题。我没有真正研究它,不保证,但是我想到了设置
    java.awt.graphicsenv=my.packge.MyGraphicsEnvironmentChild
    。我理解这一部分。。。但它没有解释如何实际实现my.packge.MyGraphicsEnvironmentChild
    。如果我可以实现那个类,那么我就不需要设置那个属性,因为我可以调用
    JFrame(newmygraphicsenvironmentchild())
    。你的回答假设我可以实现这个类,但我不能——这就是我的问题所在。不幸的是,你的回答没有帮助。