Как получить доступ к абсолютному пути к исполняемому файлу Jar?

Я знаю, что этот вопрос задавали много, но ни один из предыдущих ответов, похоже, не работает для меня.

Если я сделаю свое приложение исполняемым файлом Jar, есть ли способ сказать, где этот файл находится в файловой системе, когда он выполняется? Мое приложение должно знать, чтобы оно могло извлечь папку из своего jar-файла (рассматривая ее как zip-файл) в указанный каталог.

РЕДАКТИРОВАТЬ: Спасибо всем, кто внес свой вклад, но я думаю, что это тупик. Я должен буду попробовать что-то еще. Извините, что отнял у всех время. Я буду продолжать проверять этот вопрос, поэтому, если кто-нибудь взломает его, пожалуйста, ответьте: D

Для чего это стоит, вот мой тестовый код:

    package jarProblem;

import java.io.File;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class Main {

    public Main () {

        ClassLoader loader = Main.class.getClassLoader();

        String path = loader.getResource("jarProblem/Main.class").getPath();

        File file = new File(path);

        String pathToJar = file.getParentFile().getAbsolutePath();

        JOptionPane.showMessageDialog(new JFrame(), new JLabel(pathToJar),"CurrentFolder", JOptionPane.PLAIN_MESSAGE);

        System.exit(0);
    }

    public static void main (String[] args) {

        new Main();
    }

}

person CptSpike    schedule 04.03.2013    source источник
comment
Возможный дубликат. stackoverflow.com/questions/3153337/   -  person christopher    schedule 04.03.2013
comment
Принятый ответ на этот вопрос отображает rsrc:./, когда я добавляю его в свой тестовый код.   -  person CptSpike    schedule 04.03.2013
comment
Я только что использовал его, и он отлично работает для меня. В какой папке находится ваш файл JAR?   -  person christopher    schedule 04.03.2013
comment
Мой рабочий стол (C:/Users/CptSpike/Desktop)   -  person CptSpike    schedule 04.03.2013
comment
Как интересно. Вы пробовали какие-либо другие предложения, представленные в этой теме?   -  person christopher    schedule 04.03.2013
comment
Все они. В основном они возвращают C:/Windows/System32   -  person CptSpike    schedule 04.03.2013
comment
Какую IDE вы используете для экспорта JAR? Вы пытались сделать его стандартным файлом JAR вместо исполняемого JAR?   -  person christopher    schedule 04.03.2013
comment
Не думал об этом. Я использую Эклипс. Стоит отметить, что URL location = Test.class.getProtectionDomain().getCodeSource().getLocation(); возвращает что-то значимое при запуске из Eclipse, но после экспорта в виде исполняемого файла Jar возвращает rsrc:./   -  person CptSpike    schedule 04.03.2013
comment
Да, попробуйте как обычный файл JAR :)   -  person christopher    schedule 04.03.2013
comment
Теперь вообще не заводится :(   -  person CptSpike    schedule 04.03.2013


Ответы (2)


Вы пробовали класс Path? В нем есть все, что вы ищете.

person user1230731    schedule 04.03.2013
comment
Не могу сказать, что слышал об этом - сейчас я посмотрю на это РЕДАКТИРОВАТЬ: я не уверен, как я могу использовать путь для неизвестного местоположения файла? - person CptSpike; 04.03.2013
comment
Это в Java 7. Этот класс делает все, что связано с путями. - person user1230731; 04.03.2013
comment
Комментарии используются для разъяснения от ОП. Не ответы. - person christopher; 04.03.2013

person    schedule
comment
Возвращает C:/Windows/System32, где находится javaw.exe - person CptSpike; 04.03.2013
comment
Ваш javaw находится в папке System32? Насколько я знаю, javaw по умолчанию устанавливается в Program Files/Java/jdk‹версия›/bin... Возможно, ваши переменные среды возвращают этот путь. - person Gabriel Câmara; 04.03.2013
comment
Я подумал, что это странно. Мой JDK находится в Program Files/Java и также имеет javaw.exe. В любом случае, он не указывает на мой рабочий стол :( - person CptSpike; 04.03.2013
comment
Взгляните на свои переменные среды и пути туда... кажется, плохая конфигурация - person Gabriel Câmara; 04.03.2013
comment
Мне кажется, ничего необычного. Как ни странно, C:/Windows/System32.javaw.exe вообще не упоминается. - person CptSpike; 04.03.2013
comment
Это потому, что мы не указываем абсолютный путь с именем файла (например, C:/Windows/System32/javaw.exe). Мы помещаем абсолютный путь и ничего больше ... Но я имею в виду, что ваш USER DIR или PATH может возвращать путь system32, таким образом, java или javaw могут не определить, какой из них является вашим правильным путем. - person Gabriel Câmara; 04.03.2013