【问题标题】:Can you detect Mac Spaces in Java?你能在 Java 中检测到 Mac Spaces 吗?
【发布时间】:2012-05-17 04:18:56
【问题描述】:

我有一个主要为 Mac 构建的 java 应用程序。我需要能够做以下三件事之一:

  1. 让我的应用程序始终跟随当前空间。这意味着,如果我在桌面 2 上并启动我的应用程序,然后我切换到桌面 3,我的应用程序将自动在桌面 3 上可见。这相当于右键单击 Dock 中的应用程序图标,选择选项,然后选择所有桌面。如果我能以某种方式将此作为我的应用程序的默认行为,而无需用户操作,那就太好了!

  2. 捕获特定空间的屏幕。我目前使用 Robot 类进行屏幕截图。如果有办法我可以指定要捕获的空间,而不仅仅是当前空间,那就太好了!

  3. 至少能够检测到是否离开当前空间。

我开始倾向于这两种都不可能。但是,如果您能提供任何帮助或可能的解决方法,那就太好了!

我也玩过 GraphicsEnvironment、GraphicsDevice、GraphicsConfiguration,但没有运气。它不会返回有关 Mac 的虚拟桌面(空间)的任何信息。

让事情变得困难的是我不惜一切代价避免使用特定于平台的代码!我知道我可以使用 JNI 来完成这个,或者 java-apple 扩展中可能有一些东西。但目前,我使用单个代码分支并为 Mac 和 Windows 构建。我试图避免两个平台都有两个单独的构建和二进制文件。

【问题讨论】:

  • 您不需要进行单独的构建 - 您只需要一些平台检测和条件逻辑(加上您的本机代码)。毕竟,您正在寻找 非常特定于平台的事情。编辑:事实上,Drizzt321 已经在回应 Gray 的回答时这么说。

标签: java macos spaces virtual-desktop


【解决方案1】:

除非您正在编写本机代码并使用 JNI,否则答案是“否”。 Java 的关键设计特性之一是它与操作系统无关。您所要求的是非常 Mac OS X 特定的。我在 Apple Java Extensions 中也没有看到任何帮助。

【讨论】:

  • 格雷说,你唯一能做的就是有一个分支代码路径,你可以在其中检查你是否在 OS X 上运行,如果是,运行这个 JNI 代码,否则运行 Windows JNI 代码(或者什么都不做)。
  • 感谢您的回复,我很确定这是正确的答案,只是想确认一下。我希望 java 将空间视为多图形设备环境,并且您可以单独访问每个图形设备。
  • 我认为您只是在验证事实。是的,Java 用户代码对它所呈现的“图形设备”知之甚少。 JRE 旨在保护用户免受此类知识的影响。祝你好运。
【解决方案2】:

不,据我所知,Java 对 Spaces 没有任何特殊支持,因此您需要使用特定于平台的本机代码。然而,JNI——尽管它很丑——不是你唯一的选择。您可以改用JNA,它对程序员更友好,也更容易调试。

在您的应用中,您可以检测平台。如果它是您为其编写了特定于平台的代码的平台,则可以执行该代码。如果没有,您可以回退到默认的纯 Java 实现。

【讨论】:

  • 感谢 JNA 的建议。
猜你喜欢
  • 2011-05-06
  • 1970-01-01
  • 2012-07-16
  • 2011-01-25
  • 2018-01-26
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多