2

コンピューターにインストールされている関連プログラムを使用して(この例では、MSWordまたはOpenOffice Writerを使用して)Javaアプリケーションからファイル(たとえば、Word文書)を開きたいと思います。

問題は、このサブプロセスが終了するまで待機したいということです。これは、ProcessクラスのwaitFor()メソッドを使用して実行できます。

String executable = findAssociatedApplicationPath(); //for example, returns "C:\\Program Files\\Microsoft Office\\Office12\\msword.exe"
Process p = Runtime.getRuntime().exec(executable + " " + filepath);
p.waitFor();

誰かがfindAssociatedApplicationPath()メソッドを記述して、正しい実行可能ファイルを返す方法を教えてもらえますか?または、これを行う別の方法はありますか?

4

5 に答える 5

2

関連するプログラムを使用してファイルを開く、プラットフォームに依存しない適切な方法は、Desktop.open(). 残念ながら、結果のプロセスとやり取りする方法はありません。

startプラットフォームへの依存をなくしたい場合は、次のコマンドを使用できますcmd.exe

String fileName = "c:\\tmp\\test.doc";
String[] commands = {"cmd", "/c", "start", "\"Title\"",fileName};
Process p = Runtime.getRuntime().exec(commands);
p.waitFor()
于 2010-06-07T12:44:04.200 に答える
0

私はそれを理解しました。

cmd.exe + start.exe の組み合わせを使用すると、メソッド waitFor() はサブプロセスが終了するのを待ちません。

開始オプションなしで実行すると、魅力的に機能します(ただし、Windowsのみ):

Process p = Runtime.getRuntime().exec("cmd /c \"" + filename + "\"");   //extra quotes for filenames with spaces
p.waitFor()
于 2010-06-07T12:59:59.100 に答える
0

すべてのプラットフォームでこれを行う「普遍的な」方法はありません。Windows では、"start" を実行できます。これにより、関連付けられた正しい実行可能ファイルが検出されます。Macでは、「開く」を実行できます。Linux では、私の知る限り、優先アプリケーションを手動でマップする必要があると思います。

String execName = ("cmd /c \"start " + filename + "\"");
于 2010-06-07T12:44:16.963 に答える
0

Windows レジストリやその他のプラットフォーム固有の設定を変更することもできますが、最善の解決策は、単純にアプリケーションに独自の設定を持たせることだと思います。

これには のクラスを使用することをお勧めしますpackage java.util.prefs

于 2010-06-07T12:47:24.190 に答える
0

必然的にOS固有であるため、これを行う純粋なJavaの方法はありません。Windows プラットフォームでは、startコマンドはおそらく探しているものです (たとえば、start myfile.txt)。

于 2010-06-07T12:44:04.733 に答える