Ich habe Probleme beim Schreiben an eine Eingabeaufforderung, die ich über ProcessBuilder
öffnen kann.Schreiben in den Eingangsstrom des geöffneten Terminals
Ich habe folgendes:
public class Terminal {
public static void main(String[] args) {
List<String> launch = new ArrayList<String>();
launch.add("cmd");
launch.add("/c");
launch.add("start");
launch.add("cmd.exe");
launch.add("/k");
try {
ProcessBuilder builder = new ProcessBuilder(launch);
Process process = builder.start();
OutputStream stdin = process.getOutputStream();
InputStream stdout = process.getInputStream();
BufferedReader r = new BufferedReader(new InputStreamReader(stdout));
BufferedWriter w = new BufferedWriter(new OutputStreamWriter(stdin));
w.write("dir");
w.flush();
w.close();
}
catch (IOException io) {
io.printStackTrace();
}
}
}
Und das öffnet erfolgreich eine neue Windows-Eingabeaufforderung. Aber es schreibt nie dir
dazu. Die Eingabeaufforderung wird nur geöffnet und zeigt nur das Verzeichnis an, aus dem java Terminal
ausgegeben wurde.
Wie kann ich aktiv in ein über einen Prozess geöffnetes Terminal schreiben?
Edit: Wenn ich die Befehlsfolge Liste "cmd.exe /k start dir"
dann die neu gelaicht Eingabeaufforderung geben Sie den Befehl „dir“ ist in der Tat ändern und es in dem neuen Terminal angezeigt werden soll. Ich kann nicht scheinen, die korrekte Weise zu finden, auf den Strom zuzugreifen, um neue Befehle zu ihm zu schreiben.
public class Terminal {
public static void main(String[] args) {
List<String> launch = new ArrayList<String>();
launch.add("cmd");
launch.add("/k");
launch.add("start");
launch.add("dir");
try {
Process p = new ProcessBuilder(launch).start();
}
catch (IOException io) {
io.printStackTrace();
}
}
}
Also Gesamtbefehl '" cmd/k Start cmd/k "'? – datta
@datta warum nicht nur '' cmd''? Das startet eine Eingabeaufforderung. – f1sh
Wenn der einzige Befehl 'cmd' ist, wird kein anderes Terminal geöffnet. Wenn ich zu "cmd/k start" umschalte, wird es geöffnet, aber "dir" wird nicht ausgeführt. Wenn ich zu "start cmd/k" wechsle, sagt es "start" nicht. Letzteres funktioniert, wenn Sie es direkt in einer geöffneten Eingabeaufforderung ausführen. Ich führe bereits 'java Terminal' von einer Eingabeaufforderung aus; Ich brauche es, um eine weitere Eingabeaufforderung zum Lesen/Schreiben zu öffnen. – datta