我想要实现的是从java应用程序安装一个软件,我
创建。我已经得到了gksudo的许可。然后,我输入通行证,程序就启动了工作直到出现yes/no选项。我怎样才能通过这道题?
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class TestApp {
public static void main(String[] args) {
Process ls = null;
BufferedReader input = null;
String line = null;
try {
ls = Runtime.getRuntime().exec(
new String[] { "gksudo", "apt-get", "install", "PACKAGE" });
try {
ls.wait(6000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ls = Runtime.getRuntime().exec(new String[] { "y" });
input = new BufferedReader(new InputStreamReader(
ls.getInputStream()));
} catch (IOException e1) {
e1.printStackTrace();
System.exit(1);
}
try {
while ((line = input.readLine()) != null) {
System.out.println(line);
}
ls.destroy();
} catch (IOException e1) {
e1.printStackTrace();
System.exit(0);
}
}
}
简单-有些特殊-解决方案:不要执行"apt-get install…"而是"apt-get -y install…"。这将抑制任何需要确认的问题。
更通用的方法: Runtime.exec()创建一个流程实例。您在代码中所做的是创建两个进程"apt-get"one_answers"y"。您需要做的是:创建一个流程实例,并将字符"y"输入到该流程的输入通道中。这可以通过创建流程来实现(就像您已经做的那样),收集对其输入的引用,并将"yn"发送给该输入。
输入是通过调用process. getoutput()获得的,它会给你一个连接到流程输入的OutputStream。
这一切的结果是:
ls = Runtime.getRuntime().exec(
new String[] { "gksudo", "apt-get", "install", "PACKAGE" });
ls.getOutput().write("yn".getBytes());