所以我在Java中为exe创建了一个gui。有点麻烦,但我很努力。由于这个程序是一个控制台程序,我需要在程序运行时读取程序的输出并将其放入Swing文本框中。但我尝试过的每一种方式要么不稳定,要么完全不起作用。任何人都可以帮我解决这个问题吗?注意我已经尝试过Apache Commons exec但收效甚微。此外,我正在尝试制作这种跨平台并创建了一种获取操作系统的方法:
public enum OSType {
WINDOWS, OSX, LINUX, DAFUQ
}
/**
* Gets OS running on then caches result
* @return OS running on
**/
public static OSType getOS() {
if (os != null)
return os;
else {
os = getOperatingSystem();
return os;
}
}
/** Don't use this! Use {@link Frame#getOS()} instead **/
public static OSType getOperatingSystem() {
String OS = System.getProperty("os.name").toLowerCase();
if (OS.indexOf("win") >= 0)
return OSType.WINDOWS;
else if (OS.indexOf("mac") >= 0)
return OSType.OSX;
else if (OS.indexOf("nix") >= 0 || OS.indexOf("nux") >= 0 || OS.indexOf("aix") > 0)
return OSType.LINUX;
else
return OSType.DAFUQ;
}
修改
为了澄清,我正在创建一个.jar程序,它充当了EXE的gui。这是我目前正在尝试使用的代码来启动程序:
ProcessBuilder prc = new ProcessBuilder(commands);
prc.redirectErrorStream(true);
try {
Frame.exec = prc.start();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
commands
变量只是我需要执行的命令的列表。程序运行正常,因为我可以看到它在任务管理器上工作。这里也是我从进程的InputStream中读取的代码:
BufferedReader in = new BufferedReader(new InputStreamReader(exec.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
我试图异步读取流,所以这段代码在另一个线程中,这就是为什么我需要存储" exec"变量
答案 0 :(得分:0)
我试图从ProcessBuilder获取但是它等到程序关闭才能读取控制台输出。
不,不。它会在写入后立即读取所写的内容。您所看到的是缓冲输出在子进程中的效果,可能是stdio
。如果您无法控制该流程的代码,那么您无能为力。