2

我有一个 JAVA 应用程序,它启动(使用 ProcessBuilder)另一个 JAVA 应用程序,如下所示:

String val = "something";
ProcessBuilder processBuilder = new ProcessBuilder("java", "-classpath", dir, appName, val);
Process p = processBuilder.start();

现在,这工作正常,appName 使用参数 val 启动,它运行并工作......很好......问题是没有控制台窗口出现...... appName 做了很多输出到控制台,我们需要看到它...如何使用控制台启动该过程?

我正在尝试(“CMD.exe”,“java”,“-classpath”,dir,appName,val)等东西......但我做错了......

另外,我不能重定向流,我的程序实际上可以启动 5-10 个这些 appName,每个都应该有自己的控制台窗口来显示自己的信息。

任何帮助将非常感激。谢谢,

4

4 回答 4

0

控制台窗口通常不是最可靠的日志记录形式。它们只存储一定数量的信息(缓冲区),并且在不同平台上表现不同。

我强烈建议使用log4j之类的文件记录到文件,如果您需要实时查看它,请使用类似尾巴的程序(我看到您正在使用 Windows)。

除此之外,看到您希望窗口始终可见并为每个日志启动尾部程序可能很烦人,我会在 java swing 中编写自己的日志窗口。

基本思想是不要过度依赖操作系统。

于 2009-12-09T21:36:25.297 回答
0

试过了Runtime.getRuntime().exec("cscript java -classpath ...");吗?

无论如何,考虑使用日志框架(log4j,commons-logging),因为打开 5 个控制台并不是最聪明的做法。

于 2009-12-09T21:37:50.443 回答
0

只有当您从控制台执行 java.... 时,才会存在 Console 对象。 否则,获取一个的调用返回 null。

如果你想看到一个控制台,你需要打开一个命令 shell 控制台(例如 windows cmd.exe 或 Unix bash shell 窗口)并输入:

java -classpath="..." com.example.appName arg1

如果您想以不同的方式运行,很抱歉,登录控制台不适合您。相反,使用以下之一记录:

  • 日志4j
  • slf4j
  • 回退
于 2013-07-04T03:34:42.563 回答
0

我通过 Process 调用一些 shell 脚本来打开命令行窗口并启动我需要的任何东西。只要脚本不分离 - 您通常可以阻止任何 shell 命令执行此操作 -java 仍将保持正在运行的进程。

我在linux中做过,但概念应该是相似的。

#!/bin/bash
# To open a process in a new window.
gnome-terminal -x ./your-real-shell-script-here.sh "$@"

真正的脚本将在其中执行您的 java,例如:

#!/bin/bash
java -jar your-jar-file.jar "$@"

我认为您可以使用 javaw 在 Windows 上运行,因此您可能只需要一个 shell 脚本。

于 2012-07-24T16:06:48.873 回答