Heim > Java > javaLernprogramm > Hauptteil

ProcessBuilder vs. Runtime.exec(): Warum verhalten sie sich beim Ausführen externer Befehle unterschiedlich?

Barbara Streisand
Freigeben: 2024-11-15 02:54:02
Original
770 Leute haben es durchsucht

ProcessBuilder vs Runtime.exec(): Why Do They Behave Differently When Executing External Commands?

ProcessBuilder vs. Runtime.exec(): Analyse der Diskrepanzen

Beim Ausführen externer Befehle in Java kann es zu Diskrepanzen zwischen Runtime kommen. getRuntime().exec(...) und new ProcessBuilder(...).start(). Die folgende Untersuchung zielt darauf ab, Licht auf diese Unterschiede zu werfen und Lösungen bereitzustellen, um konsistentes Verhalten zu erreichen.

Standardargumentbehandlung

Ein wesentlicher Unterschied zwischen den beiden Ansätzen liegt in ihrer Handhabung von Argumenten. Runtime.getRuntime().exec() erwartet eine einzelne Zeichenfolge oder ein Array von Zeichenfolgen, während ProcessBuilder ein Array von Zeichenfolgen oder eine Liste von Zeichenfolgen erwartet. Wenn exec() mit einer einzelnen Zeichenfolge verwendet wird, wird die Zeichenfolge intern tokenisiert, um ein Argumentarray zu erstellen.

ProcessBuilder-Verhalten

Im Fall von ProcessBuilder werden Argumente übergeben als Array oder Liste, wobei jedes Element ein Argument darstellt. Wenn die Zeichenfolge jedoch nicht ordnungsgemäß tokenisiert ist, wird ein einzelnes Argument einschließlich aller Leerzeichen gebildet. Dies kann zu unerwartetem Verhalten führen, wie im Beispiel, bei dem der Befehl nicht korrekt ausgeführt wurde.

Lösung

Um dieses Problem mit ProcessBuilder zu beheben, stellen Sie sicher, dass die Argumente ordnungsgemäß tokenisiert sind:

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

Alternativ kann eine Liste verwendet werden:

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

Durch die Vor-Tokenisierung der Argumente kann das gewünschte Verhalten erreicht werden.

Das obige ist der detaillierte Inhalt vonProcessBuilder vs. Runtime.exec(): Warum verhalten sie sich beim Ausführen externer Befehle unterschiedlich?. 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