gpt4 book ai didi

java - 使用java执行shell命令

转载 作者:行者123 更新时间:2023-11-30 09:33:32 24 4
gpt4 key购买 nike

这个类是响应执行命令,打印结果

    public class ExecutorTask implements Runnable{

@Override
public void run() {

Process process = null;
try {
process = Runtime.getRuntime().exec("cmd /c dir");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line="";
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
process.waitFor();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
return;
}
}
}

第二个类是使用线程运行 shell 的执行器

public final class ShellCommandExecutor{

public void execute(String command){

ExecutorTask task = new ExecutorTask();
Thread executorThread = new Thread(task);
executorThread.start();

/*try {
Thread.sleep(1000);
executorThread.interrupt();
} catch (InterruptedException e) {
e.printStackTrace();
}*/
}

}

问题是为什么我必须在 ShellCommandExecutor 类中添加代码片段:

try {
Thread.sleep(1000);
executorThread.interrupt();
} catch (InterruptedException e) {
e.printStackTrace();
}

然后我可以看到打印结果:

2012-08-21  00:32    <DIR>          .
2012-08-21 00:32 <DIR> ..
2012-08-21 00:32 1,576 .classpath
2012-08-21 00:26 1,224 .project
2012-08-07 10:58 <DIR> .settings
2012-08-24 15:19 10,965 pom.xml
2012-08-07 10:57 <DIR> src
2012-08-21 00:32 <DIR> target
2012-08-24 10:22 0 velocity.log

为什么?

最佳答案

你开始了一个线程

 executorThread.start();

如果您什么都不做,启动它的线程(您的主线程)将不会等待您的 executorThread 完成后再返回,因此您的应用程序将在此线程执行其任务之前退出。

要等待 executorThread 完成,您应该调用:

executorThread.join();

稍后在代码中。此时您将确保它已完成其任务。

目前它可以工作,因为你在你的主线程中等待 1 秒,在这一秒内你的其他线程执行它的操作。但是,如果您的 executorThread 需要超过一秒的时间来执行它,它将无法工作,因此在这种情况下您不应该 sleep()

参见 Thread.join javadoc.

关于java - 使用java执行shell命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12121416/

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