了解Java程序是否从CMD运行

时间:2018-06-04 09:46:09

标签: java cmd

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

基本上,这样的事情:

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

是否有可以检查此内置的Java方法?

2 个答案:

答案 0 :(得分:1)

如果有一个控制台对象连接到Java虚拟机,则可以使用System.console()返回控制台对象。

如果没有附加控制台,则该方法返回null。请注意,这不是100%可靠。例如。该方法返回Eclipse IDE中内部控制台的null(实际上是bug #122429)。它适用于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);
    }
}

在带有java -jar MyJar.jar的Windows命令行中运行此操作将导致

There is a console!

在控制台上打印。

双击.jar文件将显示JFrame

答案 1 :(得分:0)

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

上面的命令将获取您可以过滤掉文件的java进程列表。请查找示例代码here