我正在开发一个项目,我想在 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/