我使用以下命令从另一个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吗?有没有办法以编程方式显示控制台?
提前致谢。
答案 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
通常会创建新进程并附加到它们。