我有点问题。我有一个java程序,它在启动时创建一个JFrame,在另一个线程中执行一个进程。最后一个进程使用“System.out.println”将消息记录到标准输出。我想执行这个java程序并查看JFrame而不是控制台。我希望其他进程的日志转到文件。我在.bat文件中写了这条指令:
start javaw -jar InterceptorProcess.jar > logger.log 2>&1
但是,它不起作用。我看到了JFrame,另一个进程正在运行,但消息没有转到“logger.log”。我需要做什么改变?如果不改变java程序,也许是不可能的。
问候!
这是java程序的代码:
public class InterceptorProcess
{
public static void main(String[] args)
{
FrameInterceptor frame = new FrameInterceptor();
frame.setResizable(false);
frame.setTitle("HELLO!");
Image icon = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB_PRE);
frame.setIconImage(icon);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
System.out.println("HELLO WORLD!");
}
}
答案 0 :(得分:0)
它无法正常工作的原因是因为您将start
命令的输出重定向到日志文件,而不是java程序。 start
命令实际上并不产生任何输出,因此您的日志文件为空。
如果省略批处理文件中的start
命令并只使用javaw ...
命令,则日志文件包含正确的内容。
出于您的目的,我认为甚至不需要start
命令。
您可以使用start
通过向命令添加/B
开关来启用命令的重定向,这实际上不会创建新窗口来启动该过程。它有一个限制,即shell将不再终止Ctrl+C
上的应用程序,但您的应用程序可以在必要时处理它。
来自start
帮助:
B
Start application without creating a new window. The application has ^C handling ignored. Unless the application enables ^C processing, ^Break is the only way to interrupt the application.
将您的命令更改为:
start /B javaw -jar InterceptorProcess.jar > logger.log 2>&1
你应该得到正确的日志内容。
答案 1 :(得分:0)
虽然Ryan的回答解释了问题的原因,但他没有解释解决方案:
start javaw -jar InterceptorProcess.jar ^> logger.log 2^>^&1
或
start "" "javaw -jar InterceptorProcess.jar > logger.log 2>&1"
答案 2 :(得分:-1)
你明确地说"我想执行这个java程序并看到JFrame而不是控制台"。
也许你想要做的只是以一种不显示控制台的方式启动.jar?如果是这样,只要您以正确的方式创建可执行文件.jar:
Create a manifest file and your jar file:
C:\mywork> echo Main-Class: InterceptorProcess >manifest.txt
C:\mywork> jar cvfm InterceptorProcess.jar manifest.txt *.class
or
C:\mywork> jar cvfe InterceptorProcess.jar InterceptorProcess *.class
和as long as your Windows file assocation for .jar is ok,如果双击它,它将在没有shell的情况下启动。