2012-05-08 2 views
7

私は主にMac向けに構築されたJavaアプリケーションを持っています。私は次の3つのうちのいずれかを行うことができる必要があります。JavaでMacスペースを検出できますか?

  1. 私のアプリケーションは常に現在のスペースに従ってください。つまり、デスクトップ2でアプリを起動すると、デスクトップ3に切り替えると、自動的にデスクトップ3にアプリが表示されます。これは、ドック内のアプリアイコンを右クリックし、オプションを選択してから、すべてのデスクトップを選択するのと同じです。どういうわけか私のアプリのデフォルトの動作をユーザーの操作を必要とせずに行うことができれば、それは素晴らしいことです!

  2. 特定のスペースの画面をキャプチャします。私は現在、Robotクラスを使用してスクリーンキャプチャを行います。現在のスペースだけでなく、どのスペースをキャプチャするかを指定できる方法があれば、それは素晴らしいことです!

  3. 現在のスペースを残しても少なくとも検出できること。

私はこれらのどちらにも近づくことができません。しかし、もしあなたが何か助けを与えることができる、または可能な回避策は、それは素晴らしいだろう!

私はGraphicsEnvironment、GraphicsDevice、GraphicsConfigurationで遊んでいますが、運はありません。 Macの仮想デスクトップ(Spaces)に関する情報は返されません。

また、何かを難しくしているのは、プラットフォーム固有のコードの使用を避けようとしていることです。私はこれを達成するためにJNIを使​​うことができますか、またはjava-apple拡張機能に何かがあるかもしれません。しかし、現在、私は単一のコードブランチを使用し、Mac & Windowsの両方のためにビルドします。私は両方のプラットフォーム用に2つの別々のビルドとバイナリを持つことを避けようとしています。

+0

別々のビルドを行う必要はありません。プラットフォームの検出と条件付きロジック(およびネイティブコード)が必要です。あなたは、結局のところ、非常にプラットフォーム特有の何かをしようとしています。編集:実際には、Drizzt321は既にグレイの答えに応じてこれを言った。 –

答えて

3

ネイティブコードを記述し、JNIを使​​用していない限り、答えは「いいえ」です。 Javaの主な設計機能の1つは、OSに依存しないことです。何を求めているのですか極端に Mac OS Xに固有です。 Apple Java Extensionsには、どちらも役に立ちます。

+2

グレイが言ったように、OS X上で実行しているかどうかを確認するブランチングコードパスがあれば、このJNIコードを実行します。そうでなければWindows JNIコード(または何もしません)を実行します。 – Drizzt321

+0

応答をありがとう、私はこれが正しい答えであることを確信している、確かに確認したい。私は、javaがマルチグラフィックデバイス環境のようなスペースを扱うことを望んでいたので、各グラフィックデバイスに別々にアクセスすることができます。 –

+0

私はあなたが事実を確認しているだけであると考えました。ええ、Javaのユーザーコードは、それがレンダリングしている "グラフィックデバイス"に関する知識がほとんどありません。 JREは、そのような知識からユーザを保護するように設計されています。運が良かった。 – Gray

2

私が知る限り、JavaはSpacesを特別にサポートしていないため、プラットフォーム固有のネイティブコードを使用する必要があります。しかし、JNIは、すべての醜さで、あなたの唯一の選択肢ではありません。代わりにJNAを使用することができます。これはプログラマーに優しく、デバッグするのがはるかに簡単です。

アプリでは、プラットフォームを検出できます。プラットフォーム固有のコードを記述したプラットフォームであれば、そのコードを実行できます。そうでない場合は、デフォルトの純粋なJava実装にフォールバックすることができます。

+0

JNAの提案をありがとうございます。 –

関連する問題