私は.jarファイルを持っています。コマンドプロンプトからjava -jar MyJar.jarを実行すると正常に動作します。ただし、ダブルクリックはしません。ダブルクリックするとプログラムが正しく起動しますが、内部のものは機能しません。vs java -jar MyJar.jarをダブルクリック
自分自身で何が間違っているかを調べる目的で、実行可能ファイルの.jarをダブルクリックしたときとコマンドラインから実行したときの違いは何ですか?
私は.jarファイルを持っています。コマンドプロンプトからjava -jar MyJar.jarを実行すると正常に動作します。ただし、ダブルクリックはしません。ダブルクリックするとプログラムが正しく起動しますが、内部のものは機能しません。vs 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();
}
}
});
}
}
...のようなものを使用してこれをテストすることができます。コンパイルすると、瓶は/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がリソースとの相対的な正しい場所で実行されることを確認する必要があります。これを達成するための方法
はOSに依存している
ダブルクリックすると、プログラムが実行される
必ずしもそうではありません。たとえば、MacOSの場合、javawコマンドはありません。そして、これがアプリケーションの実行コンテキストにどのように影響を与えるかについても言及していませんが、これは妥当なコメントになります – MadProgrammer
@MadProgrammer True。しかし、私は、それがWindowsのみを指していると仮定したときに、質問の未書込み部分を推測したと思います。 –
ダブルクリックして、Javaのjavawをしないで起動し、以下を参照してください。http://stackoverflow.com/questions/1997718/difference-between-java-exe-and-javaw-exe – morpheus05
「内部のものがうまくいかない」とはどういう意味ですか? –
2つの主な違いは、実行場所のコンテキストです。コマンドラインから実行すると、実行コンテキストはjavaコマンドを実行したディレクトリになります。 Jarをダブルクリックすると、コンテキストがシステムに依存します。 System.out.println(new File( "。")。getCanonicalPath());を使用できます。 – MadProgrammer