Если программа выполняется важна и может меняться в зависимости от того, как он был выполнен.
Вы можете проверить это, используя что-то вроде ...
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 выполняется в правильном месте относительно ваших ресурсов.
Как достичь этого, зависит от ОС
Двойной щелчок запускает javaw не Java, см: http://stackoverflow.com/questions/1997718/difference-between-java-exe-and-javaw-exe – morpheus05
Что значит «что-то внутри не работает»? –
Основное различие между ними - это контекст места выполнения. При запуске из командной строки контекст выполнения будет каталогом, из которого вы выполнили команду java. При двойном нажатии на Jar контекст будет зависящим от системы. Вы можете использовать System.out.println (новый файл ("."). GetCanonicalPath()); для вывода местоположения, в котором программа была выполнена в – MadProgrammer