使用ProcessBuilder时为什么Java控制台没有显示?

时间:2013-01-22 19:12:00

标签: java console processbuilder

我使用以下命令从另一个Java应用程序启动Java应用程序。

    ProcessBuilder pb = new ProcessBuilder(javaPath + javaCommand, maxMemStr,
            minMemStr, stackSizeStr, jarCommand, jarfile, jarArg);
    try {
        Process p = pb.start();
    } catch (IOException ex) {
        Logger.getLogger(launch.class.getName()).log(Level.SEVERE, null, ex);
    }

其中javaCommand是java或javaw(除非用户指向备用路径,否则javaPath在大多数时间都是空的)。问题是,在应用程序启动后,即使我验证进程列表包含java,它也不会显示控制台。

是因为PrcoessBuilder没有调用命令shell吗?有没有办法以编程方式显示控制台?

提前致谢。

3 个答案:

答案 0 :(得分:1)

这是因为“命令控制台”本身是一个附加到另一个进程的std-in / -out / -err流并在屏幕上显示它们的进程。当您单独启动Java时,没有其他进程会处理这些流,因此缺少命令控制台。要获得所需的结果,您需要启动命令控制台的新实例,然后运行自定义java命令。

可能有更好的方法来做到这一点......但我认为解决方案将取决于平台。在Windows中,您可以执行以下操作:

ProcessBuilder pb = new ProcessBuilder("start", "\"JAwesomeSauce\"", "cmd.exe",
    "/k", javaPath + javaCommand, maxMemStr, minMemStr, stackSizeStr, jarCommand,
    jarfile, jarArg);
try {
    Process p = pb.start();
} catch (IOException ex) {
    Logger.getLogger(launch.class.getName()).log(Level.SEVERE, null, ex);
}

我假设您可以在Linux / Mac上执行类似的操作,如果这是您正在使用的操作系统。

答案 1 :(得分:1)

您可能希望像这样运行命令: cmd / K java ... 要么 cmd / C java ...

答案 2 :(得分:1)

据我所知,Processbuilder会为特定流程打开pipe

你所看到的command window是一个过程本身。如果输入命令,cmd/bash通常会创建新进程并附加到它们。