我想要实现的是从我的Java应用程序安装软件 创建。我得到了gksudo的许可。然后,我键入了我的通行证,程序启动了 工作到是/没有选项出现。我怎么能传递这个问题?
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);
}
}
}
答案 0 :(得分:0)
简单 - 有点特别 - 解决方案:不要执行“apt-get install ...”,而是“apt-get -y install ...”。这将禁止任何确认问题。
更通用的方法: Runtime.exec()创建流程实例。你在代码中做的是创建两个过程“apt-get”和“y”。您需要做的是:创建一个流程实例并将字符“y”输入到此流程的输入通道中。这是通过创建过程(如您所做)来实现的,收集对其输入的引用并将“y \ n”发送到此输入。
通过调用Process.getOutput()获取输入,它为您提供连接到进程输入的OutputStream。
这一切都会产生类似的结果:
ls = Runtime.getRuntime().exec(
new String[] { "gksudo", "apt-get", "install", "PACKAGE" });
ls.getOutput().write("y\n".getBytes());