在Java中,可以使用以下命令获取当前的图形环境

GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();


然后使用

GraphicsDevice[] screenDevices = graphicsEnvironment.getScreenDevices();

for (int i = 0; i < screenDevices.length; i++) {
    GraphicsDevice graphicsDevice = screenDevices[i];
    ...
}


但是GraphicDevice的数量可以在运行时更改,例如通过插入USB显示器。或者,如果有多个监视器,则用户可以更改GraphicsDevice的分辨率或相对于另一个图形设备移动它的分辨率。

如何收听GraphicsEnvironmentGraphicDevice的变化?

编辑

我尝试使用守护程序线程实施更改检测,该线程以特定的间隔检查图形环境,但是它不起作用。

它不起作用,因为GraphicsEnvironment保留在statc变量中并且仅初始化一次。

GraphicsEnvironment的子类也缓存GraphicDevice。因此,只有重新启动jvm进程时,才会检测到新的GraphicDevice

最佳答案

一种快速而肮脏的解决方案是分批执行一个小型Java程序,该程序仅将最后一个已知的图形环境存储在文件中,并在更改时执行通知(执行应是即时的,主要是运行jvm的成本)。

它不是很优雅,但是以本机方式进行操作将需要跨平台,并且最终也将变得丑陋。除非您不在乎可移植性。

选择你的毒药。

10-08 08:56