Heim > Java > javaLernprogramm > Runtime.exec() vs. ProcessBuilder: Warum wird mein Befehl mit Code 1001 beendet?

Runtime.exec() vs. ProcessBuilder: Warum wird mein Befehl mit Code 1001 beendet?

Mary-Kate Olsen
Freigeben: 2024-11-29 13:32:09
Original
695 Leute haben es durchsucht

Runtime.exec() vs ProcessBuilder: Why Does My Command Exit with Code 1001?

ProcessBuilder vs. Runtime.exec(): Ein Vergleich

Bei der Ausführung externer Befehle aus Java stoßen Entwickler häufig auf ein Dilemma zwischen der Verwendung von Runtime. getRuntime().exec(...) und new ProcessBuilder(...).start(). Um die Unterschiede zwischen diesen beiden Ansätzen zu beleuchten, untersuchen wir ihr Verhalten im Detail.

Fallstudie

In einem Anwendungsfall, bei dem sowohl Runtime.exec() als auch Werden ProcessBuilder zur Ausführung eines bestimmten Befehls eingesetzt, ergibt sich ein bemerkenswerter Unterschied. Mit Runtime.exec() wird der Befehl erfolgreich mit einem Exit-Wert von 0 beendet. Bei Verwendung von ProcessBuilder ist der Exit-Wert jedoch 1001 und der Befehl wird vorzeitig beendet.

Ursache

Die Diskrepanz liegt in der Art und Weise, wie exec() und ProcessBuilder Befehlsargumente verarbeiten. exec() akzeptiert eine einzelne Zeichenfolge oder ein Array von Zeichenfolgen und tokenisiert die Eingabe in Argumente. Im Gegensatz dazu erwartet ProcessBuilder entweder ein varargs-Array von Zeichenfolgen oder eine Liste, wobei jedes Element als einzelnes Argument betrachtet wird.

Lösung

Um das Problem zu beheben Stellen Sie bei ProcessBuilder sicher, dass die Befehlsargumente als separate Zeichenfolgen bereitgestellt werden. Zum Beispiel anstelle von Folgendem:

Process p = new ProcessBuilder(
    "C:\DoStuff.exe -arg1 -arg2"
).start();
Nach dem Login kopieren

Verwenden Sie Folgendes:

Process p = new ProcessBuilder(
    "C:\DoStuff.exe", "-arg1", "-arg2"
).start();
Nach dem Login kopieren

Alternativ können Sie eine Liste erstellen. und übergeben Sie es wie folgt an ProcessBuilder:

List<String> params = Arrays.asList("C:\DoStuff.exe", "-arg1", "-arg2");
Process p = new ProcessBuilder(params).start();
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonRuntime.exec() vs. ProcessBuilder: Warum wird mein Befehl mit Code 1001 beendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage