0

我想要实现的是从我
创建的 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);
    }
  }

  }
4

1 回答 1

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());
于 2014-03-29T13:12:44.513 回答