Место выполнения программы важно и может меняться в зависимости от того, как она выполнялась.
Вы можете проверить это, используя что-то вроде ...
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
, он выведет
![введите описание изображения здесь](https://i.stack.imgur.com/8wI6Y.png)
Если я изменил каталог на /Volumes/Disk02/DevWork/personal/java/projects/wip/StackOverflow/WhereAmI
и запустил java -jar dist/WhereAmI.jar
, он выведет
![введите описание изображения здесь](https://i.stack.imgur.com/n56L1.png)
Контекст выполнения изменился. То же самое произойдет, когда вы дважды щелкните Jar, и это зависит от системы. Также будет иметь значение, короткий ли это путь или настоящий Jar.
Это будет означать, что если вы полагаетесь на какие-либо относительные ресурсы, вы должны убедиться, что Jar выполняется в правильном месте относительно ваших ресурсов.
Как этого добиться, зависит от ОС.
person
MadProgrammer
schedule
11.07.2013
javaw -jar
. Это то же самое, что и двойной щелчок по значку в проводнике Windows. Он использует тот же JDK, поскольку Eclipse подчиняется Windows. Но если вы выберете банку, щелкните правой кнопкой мыши и выберете другое открытое действие, Eclipse начнет делать это вместо того, чтобы позволить системе запустить его. - person Lee Meador   schedule 12.07.2013