2

だから私はユニバーサルアプリを作ろうとしています、そしてそれがアプリケーションを開く能力を持っているようにしようとしています。そこで、一言でアプリケーションを開くように考えましたが、スペースがあるとうまくいきません。これが私のやり方です:

    if(textField.getText().startsWith("application open")){
    try {
        String string1 = textField.getText().substring(17, textField.getText().length());
        Runtime.getRuntime().exec("open /Applications/\"" + string1 + "\".app");
        textArea.append("Opening application " + string1 + "..." + newline);
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
    }

誰かが私を助けることができれば、それは素晴らしいことです!よろしくお願いします、ハワード・スターク

4

5 に答える 5

6

そのバージョンを使用してexecくださいString[]

これは私のために働きます:

String cmds[] = { "open", "/Applications/Font Book.app" };
Runtime.getRuntime().exec(cmds);

これはそうではありませんが:

Runtime.getRuntime().exec("open /Applications/Font Book.app");

後者はスペースを使用してコマンド引数を分割することしかできないため、コマンドopenとして解析され、その後にスペースで区切られた2つの引数が続きます。前者(そのバージョンは-execを取りますString[])は各引数に個別に渡されるため、この問題は発生しません。

于 2012-10-11T21:29:30.460 に答える
3

コマンドと引数を別々に取るexecのバリアントを使用します。最も直接的な交換は

Runtime.getRuntime().exec(new String[] {"executable with spaces"})

exec(String [])

于 2012-10-11T21:29:06.007 に答える
2

@ ScArcher2は正しい(+1)。

しかし、このソリューションはクロスプラットフォームではありません。たとえば\、Unixではおそらくスペースの前に挿入する必要があります。ProcessBuilderより良い解決策は、の代わりに使用することですRuntime.exec()ProcessBuilderポータブルコマンドラインを作成し、スペースを自動的にサポートします。

于 2012-10-11T21:31:47.703 に答える
2

代わりにProcessBuilderを試して使用することができます: http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html

directory(File directory)メソッドを使用して作業ディレクトリ(スペースを含むディレクトリ)を設定してから、start()を使用してプロセスを起動します。

javadocからの簡略化された例:

 ProcessBuilder pb =
   new ProcessBuilder("myCommand", "myArg1", "myArg2");
 pb.directory(new File("myDir"));
 Process p = pb.start();
于 2012-10-11T21:34:38.847 に答える
1

ProcessBuilderを使用してください。これは、あなたの生活を楽にするために設計されたものです。

ProcessBuilder pb = new ProcessBuilder("open", "/Applications/\"" + string1 + "\".app");
Process p = pb.start();

この投稿で説明されているように、Javaコードからシェルスクリプトを実行し、引数を渡します

于 2012-10-11T21:40:46.130 に答える