使用JFrame和控制台从.bat执行java程序

时间:2015-01-09 22:38:20

标签: java swing batch-file

我有点问题。我有一个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!");
}
}

3 个答案:

答案 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的情况下启动。