0

これが以前に尋ねられたことは知っていますが、解決策はどれもうまくいきませんでした。基本的に必要なのは、スペースを含むコマンドを実行することです。これは私がこれまでに持っているものです:

Process p = Runtime.getRuntime().exec(new String[]{"java", "-Xms512m", "-Xmx1024m", "-cp", jars, natives, mc});   

ファイルパスにスペースが含まれているため、スペースは"jars"とから来ています(私はMacを使用しているため)"natives""Application Support"

私が見たところ、これはうまくいくはずですが、それNoClassDefFoundErrorをコピーしてターミナルウィンドウに貼り付けると、うまくいきます。また、スペースは次のようにエスケープされます。"Application\ Support"

4

2 に答える 2

0

にスペースを含むStringまで解析するを作成できるはずです。Runtimeほぼ確実に、空白のコンテンツを一重または二重の引用符で囲む必要があります...

これは、単一Stringの を使用して、変数を二重引用符で囲んでいることを示しています...

String command = "java -Xms512m -Xmx1024m -cp \"" + jars + "\" \"" + natives + "\" \"" + mc + "\"";
Process p = Runtime.getRuntime().exec(command);

既存のコードでコンテンツを二重引用符で囲むことで、おそらくそれを行うこともできます...

Process p = Runtime.getRuntime().exec(new String[]{"java", "-Xms512m", "-Xmx1024m", "-cp", "\""+jars+"\"", "\""+natives+"\"", "\""+mc+"\""});

単一の値として解釈されるように、空白の内容を一重引用符または二重引用符で囲む必要があります。

また、メッセージが表示されていることにも言及しています。NoClassDefFoundErrorそれでも問題が解決しない場合は、他の何かが問題を引き起こしている可能性があるため、エラーの原因を確認できるように、完全なスタック トレースを投稿してください。

于 2012-06-14T02:58:21.060 に答える
0

ProcessBuilderを使用します。

ProcessBuilder pb = new ProcessBuilder("java", "-Xms512m", "-Xmx1024m", "-cp", jars, natives, mc);
Process p = pb.start();

1 行に入れることもできます。

Process p = new ProcessBuilder("java", "-Xms512m", "-Xmx1024m", "-cp", jars, natives, mc).start();

これはスペースで機能するはずです。

于 2013-02-26T15:14:21.053 に答える