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

标签 java ruby

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

我不想启动新的控制台并在其中运行程序,而是想做如下的事情:

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

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

大多数 IDE(例如 jgrasp)都采用类似的概念。当您运行程序时,您可以通过其自己的命令提示符与其交互。

这是如何完成的?我尝试从进程中获取 IOStreams 并尝试至少打印控制台输出的内容,但没有成功。

最佳答案

这是一个例子:

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 方法,您可以将任何字符串写入您执行的程序。

关于java - 是否可以将 Windows 控制台输出定向到 GUI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22133112/

相关文章:

java - 数据库设计 - 使用 Short 而不是 Varchar - 用于状态字段

java - AWS java lambda 中的 org.postgresql.util.PSQLException : FATAL: database "<<database_name>>" does not exist,

ruby-on-rails - 写入包含宏的现有 Excel .xls 文件

ruby - 在 shell 中访问 ruby​​ 脚本的返回值

ruby-on-rails - IntelliJ Ultimate 将 Ruby On Rails 检测为 JRuby

java - Spark编码器: when to use beans()

java - 将文本编辑器添加到 swt 列表小部件

java - Arrays.toString,没有库

ruby-on-rails - Ruby group_by 具有不同键的哈希数组(键不固定)

ruby - 测试变量是否与多个字符串中的任何一个匹配,而没有长的 if-elsif 链或 case-when