gpt4 book ai didi

java - 进程没有以java结束,没有提前传递控制权

转载 作者:太空宇宙 更新时间:2023-11-04 11:20:12 24 4
gpt4 key购买 nike

我正在尝试调用命令提示符并登录一些凭据。为此,我采取以下方法:

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运行总是需要显式退出程序。也许我错过了一些东西。任何帮助将不胜感激。它只是适用于所需的事情,但不会退出,我需要集成到我的程序中,但无法这样做。

最佳答案

您没有关闭编写器!

可运行任务中的循环询问读者是否有更多输入:

while ((line = br.readLine()) != null) { ... }

除非主线程中的writer关闭,否则情况总是如此。因此,为了快速解决方案,请在最后一次写入操作之后放置一个简单的 writer.close()

更好的解决方案是使用 try-with-resources statement ,随 Java 7 引入。您应该按如下方式打开阅读器、编写器、扫描器等:

try (Scanner scanner = ...) { ... }
try {Reader reader = ...) { ... }
try {Writer writer = ...) { ... }

这些语句将处理结束 automatically为你。作为副作用,它将使您的代码更具可读性。

警告:关闭与 System.in 连接的 Scanner 也会关闭标准输入,因此此后将无法再读取任何输入。如果这不适合您的代码部分,请不要关闭扫描器。

关于java - 进程没有以java结束,没有提前传递控制权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45005478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com