当前位置: 首页 > 面试题库 >

有没有办法知道Java程序是从命令行启动还是从jar文件启动?

晁文斌
2023-03-14
问题内容

我想在控制台中显示消息或弹出窗口,因此如果未指定参数,我想知道应该向哪个显示

就像是:

if( !file.exists() ) {
    if( fromCommandLine()){
        System.out.println("File doesn't exists");
    }else if ( fromDoubleClickOnJar() ) {
        JOptionPane.showMessage(null, "File doesn't exists");
    }
 }

问题答案:

直接的答案是您无法确定JVM是如何启动的。

但是对于问题中的示例用例,您实际上并不需要知道如何启动JVM。您 真正 需要知道的是用户是否会看到一条写入控制台的消息。这样做的方式将是这样的:

if (!file.exists()) {
    Console console = System.console();
    if (console != null) {
        console.format("File doesn't exists%n");
    } else if (!GraphicsEnvironment.isHeadless()) {
        JOptionPane.showMessage(null, "File doesn't exists");
    } else {
        // Put it in the log
    }
 }

Console的javadoc
虽然不漏水,但强烈暗示Console对象(如果存在)会写入控制台,并且无法重定向。

感谢@Stephen Denne的!GraphicsEnvironment.isHeadless()提示。



 类似资料:
  • 问题内容: My Jar文件支持单击和从命令行启动。 仅当通过检查有可用的图形环境时,才显示GUI 如果用户双击jar文件,我希望能够将日志打印到磁盘上的文件,如果从命令行启动,则将它们打印到控制台。 我无法找到答案,是否存在任何跨平台环境变量,或者我可以查看的其他内容,以了解用户是否使用 java -jar app.jar 启动了我的程序,或者他们是否双击了。 jar文件? 问题答案: 一种方法

  • 问题内容: 我正在使用Apache-Commons-Net库。 我想知道FTP服务器是主动模式还是被动模式。 Apache-Commons-Net库中是否有类似的方法? (是一种在使用Java连接后告诉您连接模式的方法。我想先检查Maud) 问题答案: 正如@Erwin已经指出的,服务器未处于主动或被动模式。服务器通常同时支持两种模式。 您需要使用的模式通常取决于您和服务器之间 的网络配置 ,而不

  • 我一直在尝试在Windows中创建一个批处理文件,以直接启动Minecraft 1.7.10。然而,自从新的启动器发布以来,我尝试的方法已经改变了。有人知道我如何使用用户名和会话令牌从命令行直接启动它吗?我合法拥有Minecraft,所以我应该能够使用我的会话令牌和用户名。

  • 问题内容: 您从控制台启动Java程序(也许使用.bat脚本)。我不希望控制台保持可见状态,我想将其隐藏。 有没有简单的方法可以做到这一点?没有JNI? 问题答案: 使用javaw。 http://java.sun.com/javase/6/docs/tooldocs/windows/java.html javaw命令与java相同,除了javaw没有关联的控制台窗口。当您不希望显示命令提示符窗口

  • 问题内容: 我必须做一个应用程序的演示,该应用程序有一个server.jar和client.jar。两者都有命令行参数,并且是可执行的。我需要启动两个server.jar实例和两个client.jar实例。 我以为使用批处理文件是可行的方法,但是批处理文件会执行第一个命令(即> server.bat [argument1] [argument2]),并且除非关闭第一个实例,否则不会执行其他任何操作

  • 问题内容: 我想从Java程序启动文件(文档),并逐步满足以下要求: 方法必须在Mac,Win和Linux系统上适用 我不允许使用“ Runtime.getRuntime()。exec(“ cmd.exe / C +”文件名“); 我正在启动的文件必须是.doc / .docx / .rtf 该文件是在运行时创建的,它是从创建报告得出的结果。有什么好的做法吗? 问题答案: 使用Java桌面API。