コマンドプロンプトを起動し、そこにいくつかの資格情報を記録しようとしています。このために私は以下のアプローチをとっています:プロセスがjavaで終わり、制御が先に進まない
public static void main(String[] args) throws InterruptedException {
// init shell
ProcessBuilder builder = new ProcessBuilder("cmd");
Scanner scanner = null;
BufferedWriter writer = null;
try {
scanner = new Scanner (System.in);
System.out.print("Enter your MS ID : ");
String user = scanner.nextLine();
System.out.print("Enter your MS Password : ");
String pass = scanner.nextLine();
Process p = builder.start();
writer = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
writer.write("oc logout");
writer.newLine();
writer.flush();
writer.write("oc login <private-url>");
writer.newLine();
writer.flush();
writer.write(user);
writer.newLine();
writer.flush();
writer.write(pass);
writer.newLine();
writer.flush();
//Writing this will end the process after login is done
// writer.write("exit");
// writer.newLine();
// writer.flush();
Thread t = new Thread(new Runnable() {
public void run() {
try(BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()))) {
;
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (java.io.IOException e) {
e.printStackTrace();
}
}
});
t.setDaemon(true);
t.start();
p.waitFor();
} catch (IOException e) {
System.out.println(e);
}
finally {
scanner.close();
}
}
しかし私がプログラムを実行すると、それは終了しません。 Eclipseでcmdを実行すると、明示的にプログラムを終了する必要があります。たぶん私は何かを見逃しています。どんな助けでも大歓迎です。それは単に目的のために動作しますが、終了しないので、私は自分のプログラムに統合し、そうすることができません。
なぜスレッドが必要ですか?そして、いつ終了しますか? – Azeem
コンソールへのcmd出力を取得するためのものです。メインスレッドでこれを行うと、最初の出力が得られます。入力をコンソールに渡した後ではありません。私はそれがコンソールに出力を入れていないので、それを終了させていません。 –
@MohitSharmaすべての書き込みステートメントの後にフラッシュする必要はありません。クローズライター(閉鎖時にフラッシュされます) – Antoniossss