2012-04-04 5 views
2

私はこのサイトとGoogleの両方の周りにいくつかの検索を行ってきたが、任意の情報を見つけることができませんでした。 Mac OSで.appファイルを起動するJavaアプリケーションがあります。これで、.app拡張子は実際には実行可能ファイルではなく、 "/ Contents/MacOS /"サブディレクトリ内の実行可能ファイルを含むアプリケーションバンドルであることが分かりました。私はアプリ「/Applications/Chess.app」を使用します私の例についてはJavaアプリケーションから起動したMacOSアプリバンドルの作業ディレクトリを設定するにはどうすればよいですか?

。この場合、実際の実行ファイルは "/Applications/Chess.app/Contents/MacOS/"にあります。

作業ディレクトリを "/Applications/Chess.app/Contents"に設定するだけですか? /マックOS/"?

+0

あなたは 'Desktop.getDesktopを()してみてくださいました。オープン(「/アプリケーション/ Chess.app」)' –

+0

はいそれは私は現在、私のコードを持っているし、それが正常に動作するものです。しかし私は、起動したアプリケーションがあり、正しい作業ディレクトリを指定する必要があるかもしれないと考えました。たとえば、JavaアプリケーションではWindows上の.exeファイルも起動され、特定のWindowsアプリケーションは、作業ディレクトリが.exeファイルの場所のものに設定されている場合にのみ機能します。だから私はMacOSで同じ問題に遭遇するかもしれないと考えました。 – drumhead

答えて

1

マックは、一般的に、特に何も設定されている作業ディレクトリに頼ることはできませんアプリ。 Xcodeはそれを一方向に設定します。Finderから起動すると、別の方法(通常は/)に設定されます。

しかし、あなただけの内容/ MacOSの中でバイナリを実行することにより、アプリケーションを実行しないでください。 Launch ServicesまたはNSWorkspace(または、それらのいずれかに失敗した/ usr/bin/open)を使用して起動する必要があります。

+0

あなたの2番目のポイントで、私はなぜ尋ねることができますか? Contents/MacOSでバイナリを実行することで、(例えば端末から)端末で直接出力を読むことができます。私は、これが間違っていることを知りたいのですが、これは間違っていると思います。 – wardw

+1

@wardw:これは問題ありません。 OPは、1つのアプリをユーザーのために別の方法で起動させることを話していました。アプリはそれを行うべきではありません。起動サービスを使用する必要があります。たとえば、ユーザーは通常、アプリの複数の実行インスタンスが存在するとは考えていません。 Launch Servicesはこれを回避し(実行中のインスタンスを代わりにアクティブにする)、実行ファイルを直接実行すると誤って実行することは簡単です。 –

0

私は、[辞書]の "Java" の下に文字列モードに設定し、[キー] "WORKINGDIRECTORY" の下に "$ APP_PACKAGE /コンテンツ/ ..." [値]を使用します。お役に立てれば。

私はそこにいましたので、あなたのアプリのサイズは指数関数的に増加しますが、すべてのコンテンツを削除しても機能しないようにすることはできませんそれの外にどのように行くか教えてください。あなたに幸運。