我有一个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)等...但我无法正确使用...
另外,我无法重定向流,我的程序实际上可以启动这些appName的5-10个,每个应该有自己的控制台窗口显示自己的信息。
非常感谢任何帮助。 谢谢,
答案 0 :(得分:0)
控制台窗口通常不是最可靠的日志记录形式。它们只存储一定数量的信息(缓冲区),并且可以跨平台表现不同。
我强烈建议使用log4j之类的内容登录文件,如果您需要实时查看,请使用tail like program(我看到您正在使用Windows)。
除此之外,看到你希望窗口始终可见并为每个日志启动尾程序可能会很烦人,我会在java swing中编写自己的日志窗口。
基本思想是不要太依赖操作系统。
答案 1 :(得分:0)
尝试Runtime.getRuntime().exec("cscript java -classpath ...");
?
无论如何,考虑使用日志记录框架(log4j,commons-logging),因为打开5个控制台并不是最聪明的事情。
答案 2 :(得分: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脚本。
答案 3 :(得分:0)
只有从控制台执行java ....时才存在Console对象。否则,获取一个对象的调用将返回null。
如果要查看控制台,则需要打开命令shell控制台(例如windows cmd.exe或Unix bash shell窗口)并键入:
java -classpath="..." com.example.appName arg1
如果您想以不同的方式运行,不好意思,登录到控制台不适合您。而是使用以下之一记录: