你能在Java中检测Mac的Spaces吗?

8
我有一个主要针对Mac的Java应用程序。我需要能够执行以下三项操作之一:
1. 让我的应用程序始终跟随当前空间。也就是说,如果我在桌面2上启动我的应用程序,然后切换到桌面3,我的应用程序将自动显示在桌面3上。这相当于右键单击Dock中的应用程序图标,选择选项,然后选择所有桌面。如果我可以在不需要用户操作的情况下将其作为我的应用程序的默认行为,那就太好了!
2. 捕获特定空间的屏幕。我目前使用Robot类来进行屏幕截图。如果有一种方法可以指定要捕获哪个空间,而不仅仅是当前空间,那就太好了!
3. 至少能够检测是否离开当前空间。
我开始倾向于这些都不可能。但如果你能提供任何帮助或可能的解决方法,那就太棒了!
我还尝试过GraphicsEnvironment、GraphicsDevice、GraphicsConfiguration,但没有成功。它不返回关于Mac虚拟桌面(Spaces)的任何信息。
另外让事情变得困难的是,我正在尽力避免使用特定平台的代码!我知道我可以使用JNI来完成这个任务,或者可能在java-apple扩展中有一些方法。但目前,我使用单个代码分支并为Mac和Windows构建。我正在尝试避免为两个平台分别构建和生成两个二进制文件。

你不需要制作单独的构建 - 你只需要一些平台检测和条件逻辑(加上你的本地代码)。毕竟,你正在寻求做一些非常特定于平台的事情。编辑:实际上,Drizzt321已经在回答Gray的答案时说过这个。 - Greg Kopff
2个回答

3
答案是“不”,除非您编写本地代码并使用JNI。 Java的一个关键设计特点是它是OS无关的。您所要求的是极其特定于Mac OS X的内容。我在Apple Java扩展中也没有找到任何有用的信息。

2
Gray所说的,你唯一能做的就是有一个分支代码路径,在其中检查你是否在OS X上运行,如果是,则运行这个JNI代码,否则运行Windows JNI代码(或什么也不做)。 - Drizzt321
谢谢回复,我相信这是正确的答案,只是想确认一下。我希望Java能像多图形设备环境一样处理空格,并且可以单独访问每个图形设备。 - dream_team
我想你只是在核实事实。是的,Java用户代码对其正在渲染的“图形设备”知之甚少。JRE旨在保护用户免受此类知识的影响。祝你好运。 - Gray

2
不,据我所知,Java没有任何特殊支持空格的功能,因此您需要使用特定于平台的本机代码。然而,JNI(虽然很丑陋)并不是您唯一的选择。您可以使用JNA,它更加友好且更易于调试。
在您的应用中,您可以检测平台。如果它是一个您编写了特定于平台的代码的平台,您可以执行该代码。如果不是,则可以退回到默认的纯Java实现。

感谢您提供JNA建议。 - dream_team

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接