2010-11-20 17 views
0

J'ai créé un fichier JAR avec mon programme Java. Ce morceau de code ouvrira quelques fichiers dans un répertoire "Test", qui se trouve dans le même répertoire que le fichier JAR. Comme ceci:Fichier JAR en cours d'exécution à partir d'un autre répertoire?

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

Si je cours via un terminal avec: java -jar programme.jar, il fonctionne parfaitement. Mais si je cours graphiquement (clic droit sur le fichier jar et Open avec OpenJDK ...), cela ne fonctionne pas correctement. Tout comme si je courais à partir d'un autre répertoire.

Est-il possible que lorsque j'exécute graphiquement le fichier JAR, il fonctionne à partir d'un autre répertoire? En passant, je cours sur Ubuntu.

+0

Voir https://bugs.launchpad.net/nautilus/+bug/234777 et https://bugzilla.gnome.org/show_bug.cgi?id=535277 rapports de bogues. On dirait que rien ne peut être fait en ce moment. –

+0

Je n'imaginais pas que c'était un bug sur Nautilus. Je vous remercie. – CrociDB

+0

Vous ne pouvez pas supposer _anything_ sur le répertoire de travail courant lors de l'exécution d'un programme Java. Vous pouvez cependant demander à la JVM, par ex. où une classe donnée a été chargée à partir de, et aller de là. –

Répondre

2

Oui, vous obtiendrez un autre répertoire de travail ... Il y aurait deux solutions:

1) Trouvez la CWD en faisant ce hack:

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); 
     } 
    } 

2) Si les fichiers sous Test sont statiques (ne change pas souvent) la solution serait de les empaqueter dans le pot.

+0

N'y at-il pas de solution pour cela? Parce que le répertoire Test n'est pas statique – CrociDB

+0

Ajout d'un hack pour obtenir le cwd du pot .. pas très agréable si .. – dacwe

+0

Changé à lui ne pas besoin d'un nom de classe – dacwe