ファイルが.jar
あり、コマンド プロンプトから を介して実行すると、java -jar MyJar.jar
正常に動作します。ただし、ダブルクリックはしません。ダブルクリックするとプログラムは正しく起動しますが、内部の何かが機能しません。
自分で何が問題なのかを理解しようとする目的で: 実行可能ファイルをダブルクリックする.jar
こととコマンドラインから実行することの違いは何ですか?
ファイルが.jar
あり、コマンド プロンプトから を介して実行すると、java -jar MyJar.jar
正常に動作します。ただし、ダブルクリックはしません。ダブルクリックするとプログラムは正しく起動しますが、内部の何かが機能しません。
自分で何が問題なのかを理解しようとする目的で: 実行可能ファイルをダブルクリックする.jar
こととコマンドラインから実行することの違いは何ですか?
ダブルクリックすると、「javaw -jar MyJar.jar」として実行されます
プログラムが実行される場所は重要であり、実行方法によって変わる可能性があります。
次のようなものを使用してこれをテストできます...
import java.awt.EventQueue;
import java.awt.HeadlessException;
import java.io.File;
import java.io.IOException;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class WhereAmI {
public static void main(String[] args) {
new WhereAmI();
}
public WhereAmI() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}
try {
String path = new File(".").getCanonicalPath();
JOptionPane.showMessageDialog(null, "I was started in " + path);
} catch (IOException exp) {
exp.printStackTrace();
}
}
});
}
}
例えば。コンパイルすると、Jar は次の場所に存在します。/Volumes/Disk02/DevWork/personal/java/projects/wip/StackOverflow/WhereAmI/dist
ディレクトリをこの場所に変更して実行するjava -jar WhereAmI.jar
と、出力が表示されます
ディレクトリを変更し/Volumes/Disk02/DevWork/personal/java/projects/wip/StackOverflow/WhereAmI
て実行するjava -jar dist/WhereAmI.jar
と、出力されます
実行コンテキストが変更されました。Jar をダブルクリックすると同じことが起こり、システムに依存します。それがショートカットか実際のJarかどうかも重要です。
これは、相対リソースに依存している場合、Jar がリソースに相対的な正しい場所で実行されていることを確認する必要があることを意味します。
これを達成する方法はOSに依存します