1

次のコードを使用して、コーディングで Java を使用して Microsoft Excel を実行しようとしています。

Process pro = Runtime.getRuntime().exec("open -a Microsoft"+"\\"+" "+"Excel");
pro.waitFor();

このコマンドを印刷すると、コマンド ラインで手動で Excel を起動するときに使用するものとまったく同じですが、Java ランタイムを使用して起動しようとすると、機能しません。Microsoft Windows コマンド ラインではそのような問題がないことはわかっていますが、Mac では Java コードを使用してプログラムを起動する他の方法はありますか?

また、次のような同じコードを使用して電卓を起動しようとしました。

Process pro = Runtime.getRuntime().exec("open -a Calculator");

「Microsoft」と「Excel」の間のスペースが原因でしょうか。

4

1 に答える 1

2

java.lang.Runtime.exec(String)\コマンドラインを単一の引数自体に解析し、引数に入るはずのスペース文字を引用するために使用するなど、シェルのメタ文字については何も知りません。

代わりに、引数を自分で分割してみてください。

String[] cmdline = { "open", "-a", "Microsoft Excel" };
Runtime.getRuntime.exec(cmdline);

3 番目の要素のスペースをエスケープするためにバックスラッシュを使用する必要がない (または使用できる) べきではないことに注意してください。コマンドラインでコマンドを入力すると、そのバックスラッシュはシェルによって実行され、openプログラムに渡す引数に行が分割されますが、Runtime.exec() はシェルの介入なしにプロセスを直接開始します。そこにバックスラッシュがあるopenと、それを見ることができ、混乱するでしょう。

于 2012-11-01T00:21:30.307 に答える