是否可以将Windows控制台输出定向到GUI?

时间:2014-03-02 20:37:09

标签: java ruby

我正在开发一个项目,我想在Windows控制台或Linux终端中执行程序。

我没有启动新的控制台并在其中运行程序,而是希望执行以下操作:

rt.exec("cmd.exe /c start cmd.exe /k ruby rubycode.rb");

从这一点开始,我希望用户能够从GUI /我的程序中使用该程序。我的min中的想法是在静音模式下启动cmd,它不可见并锁定它。然后将控制台输出重定向到GUI,并让用户通过GUI将数据输入控制台。

类似的概念就是像jgrasp这样的大多数IDE。当您运行程序时,通过它们自己的命令提示符与它进行交互。

这是怎么做到的?我尝试从过程中抓取IOStreams并尝试至少打印出控制台输出但没有运气。

1 个答案:

答案 0 :(得分:0)

以下是一个例子:

public class ProcessTest {
private Process p;
private BufferedReader reader;
private BufferedWriter writer;

public void start() throws IOException {
    ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "dir");
    pb.directory(new File("./"));
    this.p = pb.start();
    this.reader = new BufferedReader(new InputStreamReader(this.p.getInputStream()));
    this.writer = new BufferedWriter(new OutputStreamWriter(this.p.getOutputStream()));
    new Read(this.reader).start();
}

public boolean writeToConsole(String s) throws IOException {
    if (p == null)
        return false;
    this.writer.write(s + "\n");
    this.writer.flush();
    return true;
}

public class Read extends Thread {
    private BufferedReader reader;

    public Read(BufferedReader reader) {
        this.reader = reader;
    }

    public void run() {
        try {
            String line;
            while ((line = this.reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

public static void main(String[] args) {
    try {
        new ProcessTest().start();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

使用writeToConsole方法,您可以将任何字符串写入您执行的程序。