2010-11-20 54 views
0

我用我的Java程序创建了一个JAR文件。这段代码将在dir“Test”中打开一些文件,该文件与JAR文件位于相同的目录中。像这样:JAR文件从另一个目录运行?

/ 
-- program.jar 
-- /Test 
    -- * 

如果我通过终端运行:java -jar program.jar,它运行完美。但是,如果我以图形方式运行(右键单击jar文件并使用OpenJDK打开...),它无法正常工作。就像我从另一个目录运行一样。

当我以图形方式运行JAR文件时,它是否可能从另一个目录运行?

顺便说一句,我在Ubuntu上运行。

+0

请参阅https://bugs.launchpad.net/nautilus/+bug/234777和https://bugzilla.gnome.org/show_bug.cgi?id=535277错误报告。似乎现在没有什么可以完成的。 – 2010-11-20 22:56:39

+0

我不会想象这是一个鹦鹉螺的错误。谢谢。 – CrociDB 2010-11-20 23:35:14

+0

运行Java程序时,不能假定_anything_关于当前工作目录。然而,您可以向JVM询问例如一个给定的课程从哪里下载,然后从那里开始。 – 2017-03-16 14:11:35

回答

2

是的,你会得到另一个当前工作目录......将会有两种解决方案:

public class Test { 
     public static void main(String... args) { 

      ClassLoader cl = Test.class.getClassLoader(); 
      String f = cl.getResource("").getFile(); 

      File cwd = new File(f); 

      if (cwd.toString().endsWith("!")) 
       cwd = cwd.getParentFile(); 

      JOptionPane.showMessageDialog(null, cwd); 
     } 
    } 

1)做这个黑客查找CWD 2)如果Test下的文件是静态的(不会经常更改),解决方法是将它们打包到jar中。

+0

对此没有任何解决方法吗?因为测试目录不是静态的 – CrociDB 2010-11-20 22:52:10

+0

添加了一个hack从jar中获取cwd ..虽然不是很好.. – dacwe 2010-11-20 22:56:17

+0

更改为不需要类名.. – dacwe 2010-11-20 23:19:22

相关问题