【问题标题】:Java - What's the difference of double-clicking and running from Terminal for opening a .jar file?Java - 双击并从终端运行以打开 .jar 文件有什么区别?
【发布时间】:2013-03-21 08:02:12
【问题描述】:

我正在使用基于 Java 的应用程序(.jar 文件)访问网站以进行在线讨论。最近,我在通过双击(在 Mac 和 Ubuntu 上)运行应用程序和从终端运行 java -jar client.jar 之间经历了一些奇怪的区别。当我通过双击打开客户端时,它不允许我登录,而如果我从终端运行它一切正常。

我知道描述可能过于模糊,但我只是想知道这两种运行 .jar 文件的方式之间是否有任何一般区别。谢谢!

我的Java环境如下图:

$ java -version
java version "1.7.0_17"
Java(TM) SE Runtime Environment (build 1.7.0_17-b02)
Java HotSpot(TM) Server VM (build 23.7-b01, mixed mode)

【问题讨论】:

  • 这真的取决于双击 jar 时操作系统的配置。我的配置为在 winrar 中打开它(我倾向于打开 jars 而不是运行它们)。
  • 它被配置为在我的计算机上使用 Oracle Java 7 Runtime 打开。所以应该不是这个问题。并且客户端正确打开,显示界面很好。您看到任何其他可能的配置问题吗?谢谢!
  • 有没有可能是在终端运行了一些登录脚本,导致你的PATH或者CLASSPATH不一样,导致两种情况下运行环境不一样?或者,我不知道双击文件时 Ubuntu 或 Mac 是如何设置它们的工作目录的,但也许这是一个线索。
  • 您告诉我们双击时没有会发生什么(我假设您预计会发生这种情况)。如果您还告诉我们发生了什么,将会很有帮助。
  • 现在在 Ubuntu 14.04 中双击基本正确,将 user.dir 设置为 /home/user 而不是终端将执行的 jar 的父目录。请注意,在 Windows 上双击将 user.dir 设置为 jar 的父级,这更直观以及终端的行为方式。

标签: java jar terminal


【解决方案1】:

根据用于调用程序的方法,当前工作目录可能会改变。通过java -jar 运行时,工作目录由终端设置,可以通过提示轻松识别。双击时,目录默认为用户的主目录。快速演示测试:

public class TestWorkingDirectory { 
    public static void main(String[] args) {
        javax.swing.JOptionPane.showMessageDialog(
                null, System.getProperty("user.dir"));
    }
}

假设 JAR 位于/home/test/Applications,从终端运行时将显示此路径。双击时,它只是/home/test。因此,使用这两种方法的路径可能相同(当存档位于 ~ 时),但不一定 - 尝试调试/重现异常行为时会遇到困难。

【讨论】:

  • Ubuntu 14.04 上的双击行为可能是一个错误,因为当前目录应该是 jar 目录的父目录更直观。这就是在 Windows 10 上实现双击的方式。这允许双击利用相对路径。
  • 是否可以将目录从主目录更改为文件所在的位置?
猜你喜欢
  • 2017-12-16
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
  • 2017-02-05
  • 2018-12-21
  • 2022-01-11
  • 1970-01-01
  • 2016-12-10
相关资源
最近更新 更多