0

我使用以下命令从另一个 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 不调用命令外壳吗?有没有办法以编程方式显示控制台?

提前致谢。

4

3 回答 3

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 中执行类似的操作。

于 2013-01-22T19:28:17.607 回答
1

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

于 2013-01-22T19:30:03.917 回答
1

据我记得Processbuilder打开pipe一个特定的过程。

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

于 2013-01-22T19:33:03.113 回答