2010-11-20 11 views
0

JavaプログラムでJARファイルを作成しました。このコードは、JARファイルと同じディレクトリにある "Test"ディレクトリ内のいくつかのファイルを開きます。このように:別のディレクトリから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のバグレポートを参照してください。今は何もできないようです。 –

+0

ノーチラスのバグだったとは思いません。ありがとうございました。 – CrociDB

+0

Javaプログラムの実行中に現在の作業ディレクトリについて考えることはできません。しかし、JVMに例えば、そこから与えられたクラスがロードされ、そこから移動します。 –

答えて

2

はい、あなたは別の現在の作業ディレクトリを取得します... 2つの解決策があるでしょう:

1)このハックを行うことによって、CWDを探す:

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)Testのファイルが静的である場合(頻繁に変更されない場合)は、そのファイルをjarファイル内にパッケージ化することです。

+0

これは何も解決策はありませんか?テストディレクトリは静的ではないので – CrociDB

+0

jarからcwdを取得するためのハックを追加しました..それほど素晴らしいわけではありません。 – dacwe

+0

クラス名は必要ありません.. – dacwe

0

これが役立つかどうかはわかりませんが、以下は同様のJAR質問へのリンクです。

Running jar file with source files in another directory

+0

これは解決策のようには見えません。 –

+0

私は前にこの投稿を見ましたが、実際には役に立ちません。 : – CrociDB