可能重复:
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();
}
答案 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();
}
}
}