【问题标题】:Was my Jar double clicked, or launched from the command line?我的 Jar 是被双击的,还是从命令行启动的?
【发布时间】:2018-08-13 07:12:36
【问题描述】:

我的 Jar 文件支持点击和从命令行启动。

如果有可用的图形环境,我将只显示 GUI,通过检查 GraphicsEnvironment.isHeadless()

如果用户双击 jar 文件,我希望能够将日志打印到磁盘上的文件,如果从命令行启动,我希望能够将它们打印到控制台。

我一直无法找到答案,是否有任何跨平台环境变量,或者我可以查看其他任何东西来了解用户是否使用 java -jar app.jar 启动了我的程序 em>,或者他们是否双击了 .jar 文件?

【问题讨论】:

  • 我认为您可以检查您的 args(在您的 main 中)并查看是否通过了“-jar app.jar”。你必须检查一下,因为我不确定
  • 不.. 这些是 JVM 参数。在此示例中,我的 args 数组将为空。
  • 感谢@AlanDeep,我知道如何确定...您发布的链接就是我所说的我已经用于此的链接。不管图形环境是否存在,我都想知道如何二进制文件是如何启动的。

标签: java


【解决方案1】:

一种方法是确定控制台何时为空:

public static void main(String[] args) {
    Console console = System.console();
    if(console!=null){
        System.out.println("Console is not null");
    }else{
        System.out.println("Console is null");
    }
}

尝试使用以下命令从命令行运行代码:

java -jar [your_runnable_file.jar]

【讨论】:

  • 使用JOptionPane.showMessageDialog(f, "Console is null.");,这实际上似乎按预期工作,至少在我刚刚尝试过的环境中! 但是在 Eclipse 中,它说没有控制台,但确实存在。
  • System#console 可以为空,同时仍被另一个程序执行。 java -jar file.jar 可以在控制台对象为空时从 exe 甚至另一个 jar 文件执行。因此你的方法是有缺陷的。这似乎是一个java问题。他们应该有一个 javadoubleclick.exe,它在 double 上运行,然后添加一个 System.property("jar.doubleclicked"),它以字符串形式返回 true/false
猜你喜欢
  • 2014-12-15
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
相关资源
最近更新 更多