了解Java程序是否从CMD运行

了解Java程序是否从CMD运行,java,cmd,Java,Cmd,我想编写一个通过文本接收输入的Java程序(控制台程序)。 当这个程序启动时,直接在main方法中,我希望能够检查这个程序是从命令提示符(cmd)还是从JAR文件启动的。这样,如果没有cmd接收输入,我就可以打开JFrame来接收输入 基本上是这样的: public static void main(String[] args){ if(startedFromCmd()) { startProgram(); } else{ openInputFra

我想编写一个通过文本接收输入的Java程序(控制台程序)。
当这个程序启动时,直接在main方法中,我希望能够检查这个程序是从命令提示符(cmd)还是从JAR文件启动的。这样,如果没有cmd接收输入,我就可以打开JFrame来接收输入

基本上是这样的:

public static void main(String[] args){
    if(startedFromCmd()) {
        startProgram();
    } else{
        openInputFrame();
        startProgram();
    }
}

是否有任何内置Java方法可以检查此问题?

您可以使用
System.console()
,如果Java虚拟机上连接了console对象,它将返回一个console对象

如果没有附加控制台,则该方法返回
null
。请注意,这不是100%可靠。例如,对于Eclipse IDE中的内部控制台,该方法返回
null
(实际上是bug)。不过,它可以与Windows命令行一起使用

一个例子如下所示:

public static void main(String[] args)
{
    if (System.console() != null)
    {
        System.out.println("There is a console!");
    }
    else
    {
        JFrame frame = new JFrame("There is no console!");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(100, 100);
        frame.setVisible(true);
    }
}
在Windows命令行中使用
java-jar MyJar.jar
运行此命令将导致

有一个控制台

正在控制台上打印


双击.jar文件将显示一个
JFrame

您可以使用
System.console()
,如果Java虚拟机连接了一个console对象,它将返回一个console对象

如果没有附加控制台,则该方法返回
null
。请注意,这不是100%可靠。例如,对于Eclipse IDE中的内部控制台,该方法返回
null
(实际上是bug)。不过,它可以与Windows命令行一起使用

一个例子如下所示:

public static void main(String[] args)
{
    if (System.console() != null)
    {
        System.out.println("There is a console!");
    }
    else
    {
        JFrame frame = new JFrame("There is no console!");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(100, 100);
        frame.setVisible(true);
    }
}
在Windows命令行中使用
java-jar MyJar.jar
运行此命令将导致

有一个控制台

正在控制台上打印


双击.jar文件将显示一个
JFrame

,您可以使用WMIC命令获取当前正在运行的CMD进程。但是,这仅适用于windows。对于unix/Mac,您可以使用类似于ps-ef | grep java的东西。
wmic进程,其中“名称如“%java%”获取命令行,processid


上面的命令将获取java进程列表,您可以在其中筛选出文件。请查找示例代码

您可以使用WMIC命令获取当前正在运行的CMD进程。但是,这仅适用于windows。对于unix/Mac,您可以使用类似于ps-ef | grep java的东西。
wmic进程,其中“名称如“%java%”获取命令行,processid


上面的命令将获取java进程列表,您可以在其中筛选出文件。请查找一个示例代码

如果它是使用jar文件从CMD启动的,该怎么办?实际上,您可以简单地检查您的程序是否收到了输入,或者是否使用了命令行参数的长度。因此,如果接收到输入,您可以简单地执行输入命令。如果没有收到input,请打开一个框架以接收用户的输入。可以同时从命令提示符和JAR文件启动Java程序。没有任何东西可以阻止您以任何方式打开
JFrame
。不清楚你在问什么。嗯,是的,你可以从cmd启动一个JAR文件,但在这种情况下,它会在cmd中运行,不是吗?就这样说吧,;如果我使用System.out.println(“…”),那么文本将显示在哪里?如果它出现在cmd中,那么我不必打开JFrame,因为我可以将输入写入该cmd中。如果它是使用jar文件从cmd中启动的呢?实际上,您只需使用命令行参数的长度检查程序是否收到输入。因此,如果接收到输入,您可以简单地执行输入命令。如果没有收到input,请打开一个框架以接收用户的输入。可以同时从命令提示符和JAR文件启动Java程序。没有任何东西可以阻止您以任何方式打开
JFrame
。不清楚你在问什么。嗯,是的,你可以从cmd启动一个JAR文件,但在这种情况下,它会在cmd中运行,不是吗?就这样说吧,;如果我使用System.out.println(“…”),那么文本将显示在哪里?如果它出现在cmd中,那么我就不必打开JFrame,因为我可以将输入写入cmdPerfect!!这正是我想要的=)完美!!这正是我要找的=)