在Java中,可以使用以下命令获取当前的图形环境
GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
然后使用
GraphicsDevice[] screenDevices = graphicsEnvironment.getScreenDevices();
for (int i = 0; i < screenDevices.length; i++) {
GraphicsDevice graphicsDevice = screenDevices[i];
...
}
但是
GraphicDevice
的数量可以在运行时更改,例如通过插入USB显示器。或者,如果有多个监视器,则用户可以更改GraphicsDevice
的分辨率或相对于另一个图形设备移动它的分辨率。如何收听
GraphicsEnvironment
和GraphicDevice
的变化?编辑
我尝试使用守护程序线程实施更改检测,该线程以特定的间隔检查图形环境,但是它不起作用。
它不起作用,因为
GraphicsEnvironment
保留在statc变量中并且仅初始化一次。GraphicsEnvironment
的子类也缓存GraphicDevice
。因此,只有重新启动jvm进程时,才会检测到新的GraphicDevice
。 最佳答案
一种快速而肮脏的解决方案是分批执行一个小型Java程序,该程序仅将最后一个已知的图形环境存储在文件中,并在更改时执行通知(执行应是即时的,主要是运行jvm的成本)。
它不是很优雅,但是以本机方式进行操作将需要跨平台,并且最终也将变得丑陋。除非您不在乎可移植性。
选择你的毒药。