Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Java创建一个“虚拟设备环境”来与多个监视器一起工作?_Java - Fatal编程技术网

如何用Java创建一个“虚拟设备环境”来与多个监视器一起工作?

如何用Java创建一个“虚拟设备环境”来与多个监视器一起工作?,java,Java,GraphicsEnvironment的getScreenDevices方法必须返回系统中的GraphicsDevices列表。如何事先配置我的系统以使用这些图形设备?只要在操作系统中连接并启用监视器,Java就会检测到它们。考虑这个代码: GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] devices = env.getScreenDevices(); R

GraphicsEnvironment的getScreenDevices方法必须返回系统中的GraphicsDevices列表。如何事先配置我的系统以使用这些图形设备?

只要在操作系统中连接并启用监视器,Java就会检测到它们。考虑这个代码:

GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] devices = env.getScreenDevices(); Rectangle[] screenBounds = new Rectangle[devices.length]; for (int x = 0; x < this.devices.length; x++) { GraphicsConfiguration conf = this.devices[x].getDefaultConfiguration(); screenBounds[x] = conf.getBounds(); } 您还可以调查Toolkit.getDefaultToolkit.getScreenInsertConfiguration以获取插入列表,以便知道开始栏的位置


但是,请注意,如果在某些X windows环境下尝试执行此操作,则插图不可用。我通过在每个屏幕上创建一个不可见的框架来解决这个问题,最大化它们,等待它们生成一个调整大小事件,然后抓住它们的边界并处理它们。但我只有在所有监视器都没有插入的情况下才会触发此代码。

如果我很理解你的问题,并且你想创建一个虚拟设备,这里有一个答案:


由于GraphicsEnvironment使用系统属性访问可用设备,您必须修改JVM或欺骗系统,使其认为自己有另一个设备。

我想他想创建自己的设备进行测试。我同意,但他谈到虚拟设备,所以我不是很确定。如果你要处理多个监视器,一个好的计划是在开始时探测系统的监视器一次。然后,缓存结果,需要检查监视器维度的任何时候,都可以检查缓存的结果。通过这种方式,您不必不断探测硬件,我从经验中知道,硬件在某些X windows系统上会间歇性出现故障。要还原我删除的注释-如果您想测试可与多个监视器一起工作的软件,您需要一个具有多个监视器的系统。除了在缓存中创建两个虚拟监视器之外,唯一其他可能的方法是采用我刚才提到的缓存方法。如果您的所有代码都与缓存交互,您将能够以这种方式模拟多个监视器,并且知道一旦有多个监视器,它就会工作。不幸的是,传统的最大化按钮不支持这种设置。当然,我发现在某些X windows设置中以编程方式最大化windows存在问题。事实证明,如果你想突破这些东西并开始影响行为,你最终会重写很多东西,使它们按你所希望的方式工作。即使你创建了这些设备,你如何能够用它们进行测试?您在这些设备上创建的任何内容都不可见!我猜这些虚拟设备可以链接到其他远程设备。这怎么可能呢?我从未见过远程设备接口,也没有关于如何创建它的详细信息。如何修改JVM或欺骗系统?对于JVM修改,我将改变检测设备的方式,以添加我自己的层。对于系统,我必须编写一个内核模块。我没有说这是微不足道的,我说这是可能的。这是一个措辞非常糟糕的问题。你能提供更多关于你想做什么的细节以便我们了解你的意思吗?