Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
断开java应用程序与控制台/命令窗口的连接_Java_Command Line - Fatal编程技术网

断开java应用程序与控制台/命令窗口的连接

断开java应用程序与控制台/命令窗口的连接,java,command-line,Java,Command Line,可能重复: 当我在windows上以批处理文件的形式运行java swing应用程序时,控制台/命令窗口在java应用程序运行时保持打开状态。这在我的任务栏上创建了一个我不希望有的额外窗口。但是当我关闭命令窗口时,它会停止我的java应用程序。是否有一种方法,可以通过批处理文件或命令行参数或对应用程序的代码更改,在启动swing应用程序并关闭控制台窗口后退出java.exe,而应用程序仍在运行 主要方法如下: public static void main(String args[]) {

可能重复:

当我在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();
}    

理想情况下,您最终将在代码中的某个地方执行的操作是调用。这将使GUI代码进入正确的线程,并且应该能够在主线程退出后关闭命令行

这是我所说的一个基本例子:

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

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

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


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

我们可以看一下您的代码片段吗?最好是主方法。另外,检查一下:这是这个问题的一个dup:GUI不应该首先与主线程耦合。我完全同意,但是UI是在主线程中初始化还是在UI线程中初始化与是否为Java进程构造和维护控制台无关。虽然这是初始化Swing UI的正确方法,但当主线程退出时,控制台不会消失。它将一直保持,直到java.exe退出,也就是进程中最后一个非守护进程线程退出时。您可以在主线程退出后关闭控制台窗口。我想这是一种不同的方式来解决不同窗口的问题。