0

我有一个带有以下代码的程序:

import java.io.File;
import javax.swing.JOptionPane;

public class Main {

    public static void main(String[] args) {
        File file = new File("config");
        JOptionPane.showMessageDialog(null, file.getAbsolutePath());
        System.out.println(file.getAbsolutePath());
    }
}

我在 Eclipse 中将其导出为 Runnable Jar。然后我将文件复制到/home/username/Desktop/我的 Ubuntu 13.04 系统上并复制cd到该目录。当我运行命令java -jar Main.jar时,我得到以下输出:

/home/username/Desktop/config

现在我运行 chmod 使 Jar 可执行,然后我去双击 Jar。我从对话框中得到以下输出:

/home/username/config

为什么我得到不同的输出?将 Jar 移动到其他目录会产生类似的结果。谷歌搜索和搜索所以没有说明这个问题。

4

1 回答 1

2

new File("config")相对于运行 JVM 的进程的工作目录。当您在进入目录后从命令行运行时,cd那就是工作目录。

从 Ubuntu GUI 双击 jar 并没有将工作目录设置为包含 jar 文件的同一目录,因此存在差异。

尝试这个:

cd into /home/username从命令之类的,然后键入 java -jar Desktop/Main.jar. 这将打印出与双击 jar 时相同的内容。

如果您希望每次都获得相同的目录,请使用绝对目录名称。在 Linux 上,通过以 / 开头的目录来做到这一点。例如new File("/home/username/config")。如果要动态查找用户主目录,请使用System.getProperty("user.home").

例如new File( System.getProperty("user.home") + "/config" );

于 2013-04-11T18:11:25.297 回答