0

Java を介してコマンド プロンプトまたはターミナルで実行できるさまざまなコマンドを実行したいと考えています。

いくつかの場所を検索しましたが、適切な回答が得られませんでした。

VISAGE_HOME として環境に設定されているコンパイラを実行し、すべてのビルド タスクを実行するために GRADLE を実行したいと考えています。

これらすべてのコマンドを Java プログラム内から呼び出したいと考えています。

これはスイングアプリケーションであるため、ボタンのクリックまたはその他のイベントでこれらのコマンドを呼び出したいと思います。

私の問題は、これをプログラムできないことです:(。

また、これを行う API も知りません。いくつかのサンプル コードを確認しましたが、ほとんどのサンプル コードには、シェル コマンドまたはコマンド プロンプト コマンドを実行する同じ種類のコードが含まれています。上記のことをするように私に示したものはありませんでした。

4

5 に答える 5

2

ProcessBuilderを見てください。返される Process オブジェクトにはwaitForメソッドがあるため、プロセスが完了するのを待つことができます。その後、次のプロセスを開始できます。

例えば

Process p = new ProcessBuilder("runYourCommand").start();
InputStream in = process.getInputStream();
InputStreamReader inr = new InputStreamReader(in);
BufferedReader br = new BufferedReader(inr);
String inputLine;
while ((inputLine = br.readLine()) != null) {
  System.out.println(inputLine);
}
p.waitFor();

ProcessBuilder のもう 1 つの興味深いメソッドは、environment () です。これにより、アクセスできる環境変数が返されます。API ドキュメントから

Map<String, String> env = pb.environment();  
env.put("VAR1", "myValue");
于 2012-10-03T20:17:49.127 に答える
1

このようなもの:

String cmd = "gedit";

Runtime run = Runtime.getRuntime();

Process pr = run.exec(cmd);
于 2012-10-03T20:17:02.807 に答える
1

まず、ProcessBuilderあなたの友達ですか...

あなたは見ることができます;

次に、System.getenvを使用して、指定された環境変数の値を見つけ、自分で置き換える必要があります。

注:コマンドを検索するための環境変数Processが に自動的に含まれることを指摘してくれた Guillaume Polet に感謝します。path

また、EDT でブロッキング プロセスを実行しないでください。

外部コマンドの実行は本質的にブロック アクションですが、明示的ではありませんが、プロセスの出力を消費する必要があること、またはプロセスの終了について知りたいことを考慮すると、何らかのブロック アクションを実行する必要があります。EDT ではこれを行わないでください。プログラムがハングしているように見えます。

于 2012-10-03T20:20:30.133 に答える
0

メソッドを使用して、Runtime.execJava 内からコマンドを実行できます。システム環境変数は通常、jvm 内からは見えません。これらのシステム環境プロパティを jvm プロパティとして Java アプリケーションに送信するランチャーを使用できます。

于 2012-10-03T20:18:42.240 に答える
0

http://javarevisited.blogspot.de/2011/02/how-to-execute-native-shell-commands.htmlによると、「java.lang.Runtime」を含めた後にコードに次を実装すると、完全に機能するはずです。

try {

Process process = Runtime.getRuntime().exec("Command to be executed");

} catch (Exception e) {

e.printStackTrace(System.err);

}

于 2012-10-03T20:21:23.153 に答える