我有一个jframe程序。我想在jframe中执行一个命令重定向它的输出并打印结果。
我尝试过:
public void runConsoleCommand(String command)
{
try
{
System.setOut(this.printStream);
System.setErr(this.printStream);
System.out.println("testing 123....");
String term = OSUtil.getTerminal();
String close = OSUtil.getExeAndClose(OSUtil.osSimpleName);
ProcessBuilder pb = new ProcessBuilder(new String[]{term, close, command});//TODO: wait until the process is done
pb.inheritIO();
Process process = pb.start();
process.waitFor();
}
catch(Throwable e)
{
e.printStackTrace();
}
}
输出:它在jframe控制台中打印“testing 123….”,并在eclipse而不是jframe中打印其余部分。对于windows 10上命令提示符下的命令“帮助”
我正在使用jre 8。我注意到process builder Inheritario使用filedescriptor#out作为句柄长id。我认为它得到了错误的句柄。这是java错误吗?我做错什么了吗?有办法解决吗?
我的jframehttps://github.com/jredfox/filededuper/blob/main/src/jredfox/selfcmd/jconsole/jconsole.java
我的测试主类https://github.com/jredfox/filededuper/blob/main/src/jredfox/filededuper/debugcode.java
编辑:inheritio有一个jre错误,它重定向了输出、输入和错误。它是不可修复的,它与jni(java native something)返回第一个outputstream、inputstream或error流的确切代码有关。
我没有使用inheritio,我用jframe图形修复了一个bug,现在可以正常工作了。不过,我还是想知道为什么会发生这种错误。我使用反射进行了一些尝试并刷新了它,但是,本机filedescriptor#set方法返回了与最初相同的指针,因此如果不修复本机库,它实际上是不可修复的。
暂无答案!
目前还没有任何答案,快来回答吧!