2016-04-13 15 views
0

OS X用のJava SWTアプリケーションを作成し、.jarとしてエクスポートして.appにバンドルしました。すべては私のアプリ内の重要な部分を除いて、期待どおりに動作します。他のアプリを開く必要があります。OS X Javaの.appバンドルで他のアプリを開くことができません。

私はRuntime.exec();と同様にProcessBuilderを試しました。起動する必要のある他のアプリケーションでopenというコマンドを呼び出しました。これは、Eclipseから完全に正常に動作するか、エクスポートされた.jarをTerminal経由で起動した場合に動作します。ただし、.appをダブルクリックして起動した場合は機能しません。

Macのアプリはサンドボックス化されているので、アプリケーション内からopenを呼び出すのはなぜですか何もない?

私は必要なアプリを開くために2つのアプローチを使用しました。これはスチームゲームですが、小売店としても提供されているため、アプリ自体またはsteam://プロトコルを使用して起動できます。私のコードでは、私は次のことを試してみました:

ProcessBuilder pb = new ProcessBuilder("open", "steam://rungameid/57300//"); 
pb.start(); 

ProcessBuilder pb = new ProcessBuilder("open", appDir); 
pb.start(); 

appDirは、私が始めたいの.appバンドルへのパスを含む文字列です。

これはMacアプリケーションバンドルからは失敗しますが、Eclipse/Jarからうまく動作する理由は何ですか?コンソールでアプリケーションを実行すると(bashスクリプトによる)エラーは返されないので、Javaはコマンドをうまく実行するようですが、OS Xはおそらくそれを無視していますか?

私はGoogleでこれを検索してみましたが、おそらく非常に珍しい、または非常に具体的で、何も見つかりませんでした。

+0

:私はここで私の他の質問には、より詳細な答えを書きましたか? – Black

+1

ここでの答えで詳しく説明した 'Runtime.exec()'を使ってみましたか?http://stackoverflow.com/questions/19456454/how-do-i-launch-another-app-from-java-on-a -mac – Black

+0

「appDir」には何を指定していますか? –

答えて

0

steam:が登録済みのURLタイプの場合は、org.eclipse.swt.program.Program#launch(String)を使用できます。たとえば、次のような問題は、私自身のセットアップだったので

org.eclipse.swt.program.Program.launch("steam://rungameid/57300//");

+0

ありがとうございます。それは問題の半分を解決します。 これをアプリパッケージからうまく実行できました。他の半分については、指定しないと悪いですが、両方の方法(蒸気と通常のアプリの両方の起動)が必要ですが、これは進歩です! –

+0

私はアプリを起動するためにこれをテストし、TextEditと私が望むアプリの両方を起動することができました。ですから、基本的には、これは「オープン」のようなものではありません。このように引数を指定できるかどうか知っていますか?無関係なので、私はそれを残しましたが、これを使ってargsを使用することはできませんでした。ありがとう。 –