我想编写一个通过文本(控制台程序)接收输入的Java程序 当这个程序启动时,直接在 main 方法中,我希望能够检查程序是从命令提示符(cmd)还是从JAR文件启动的。这样我就可以打开一个JFrame来接收输入,如果没有cmd可以接收它。
基本上,这样的事情:
public static void main(String[] args){
if(startedFromCmd()) {
startProgram();
} else{
openInputFrame();
startProgram();
}
}
是否有可以检查此内置的Java方法?
答案 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