Trường hợp chương trình được thực thi là quan trọng và có thể thay đổi tùy thuộc vào cách chương trình được thực thi.
Bạn có thể kiểm tra điều này bằng cách sử dụng một cái gì đó giống như ...
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();
}
}
});
}
}
Ví dụ. Khi biên soạn, các Jar nằm trong /Volumes/Disk02/DevWork/personal/java/projects/wip/StackOverflow/WhereAmI/dist
Nếu tôi thay đổi thư mục đến vị trí này và chạy java -jar WhereAmI.jar
nó ra

Nếu tôi thay đổi thư mục để /Volumes/Disk02/DevWork/personal/java/projects/wip/StackOverflow/WhereAmI
và chạy java -jar dist/WhereAmI.jar
nó ra

Ngữ cảnh thực hiện đã thay đổi. Điều tương tự sẽ xảy ra khi bạn nhấp đúp vào Jar và nó phụ thuộc vào hệ thống. Nó cũng sẽ quan trọng nếu nó là một vết cắt ngắn hoặc Jar thực tế.
Điều này có nghĩa là nếu bạn dựa vào bất kỳ tài nguyên tương đối nào, bạn phải đảm bảo rằng Jar được thực thi trong vị trí chính xác, liên quan đến tài nguyên của bạn.
Làm thế nào để đạt được điều này phụ thuộc vào hệ điều hành
Kích đúp ra mắt javaw không java, xem: http://stackoverflow.com/questions/1997718/difference-between-java-exe-and-javaw-exe – morpheus05
Bạn có ý gì khi "một cái gì đó bên trong không hoạt động"? –
Sự khác biệt chính giữa hai là bối cảnh của vị trí thực hiện. Khi chạy từ dòng lệnh, ngữ cảnh thực thi sẽ là thư mục mà bạn đã thực hiện lệnh java từ đó. Khi nhấp đúp vào Jar, bối cảnh sẽ phụ thuộc vào hệ thống. Bạn có thể sử dụng System.out.println (tệp mới ("."). GetCanonicalPath()); để xuất ra vị trí mà chương trình đã được thực hiện trong – MadProgrammer