从控制台/命令窗口断开java应用程序

时间:2009-10-01 00:40:31

标签: java command-line

  

可能重复:
  Is there a way to the hide win32 launch console from a Java program (if possible without JNI)

当我在Windows上的批处理文件中运行我的java swing应用程序时,控制台/命令窗口在我的java应用程序运行时保持打开状态。这会在我的任务栏上创建一个额外的窗口,我不希望这样做。但是当我关闭命令窗口时,它会停止我的java应用程序。有没有办法,也许是通过批处理文件或命令行参数或我的应用程序的代码更改,在我的应用程序仍在运行时启动我的swing应用程序和控制台窗口关闭后退出java.exe?

主要方法如下:

public static void main(String args[]) {

    ApplContext applContext = new ApplContext();
    Throwable error = null;

    try {
        applContext.setUserConfigDir(args.length>0 ? args[0] : null);
        applContext.loadData();
        ApplTools.initLookAndFeel(Parameters.P_NIMBUS_LAF.of(applContext.getParameters()));
    } catch (Throwable e) {
        error = e;
    }

    // JWorkSheet is a JFrame.
    new JWorkSheet(applContext, error).setVisible();
}    

2 个答案:

答案 0 :(得分:6)

使用javaw.exe而不是java运行应用程序。如果您从bat文件运行,请将其与start命令结合使用:

> start javaw.exe -jar myapp.jar

在此模式下运行时,如果您依赖控制台进行任何调试,最好设置正确的日志记录或至少重定向输出流。例如,如果没有控制台,您将永远不会看到为未处理的异常打印出友好的堆栈跟踪。

注意:java.exe是Windows 控制台应用程序。因此,无论它是如何启动的,或者在其中运行的是什么线程,都将为其分配一个控制台。这就是javaw.exe存在的原因。

答案 1 :(得分:1)

理想情况下,您最终会在代码中的某处执行调用SwingUtilities.invokeLater(Runnable r)。这会将您的GUI代码抛出到正确的线程中,并且您应该能够在主线程退出后关闭命令行。

这是我所说的基本例子:

public static void main(String[] args){
    SwingUtilities.invokeLater(new Runnable(){
        public void run(){
            JFrame yourWindow = new YourFrame();
            yourWindow.createAndShow();
        }
    }
}