2015-01-23 8 views
2

Я пытаюсь запустить исполняемые jar-места в папке resources моего проекта. Если я помещаю банку в любой каталог моей файловой системы и предоставляю абсолютный путь, он отлично работает. Пожалуйста, смотрите код ниже:Невозможно получить доступ к исполняемому банку, запущенному в рамках проекта

String jarPath = "C:\\JarFolder\\myJar.jar";   
    String command = "java -jar"; 
    String space = " "; 
    String params = "-a abc"; 
    try { 
     proc = Runtime 
       .getRuntime() 
       .exec(command + space + jarPath + space + params); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

Но когда я помещаю флягу в папке resources и установить относительный путь банку как:

String jarPath = "..\\..\\..\\resources\\myJar.jar"; 

Я получаю сообщение об ошибке: Error: Unable to access jarfile ..\\..\\..\\resources\\myJar.jar

Я проверил путь, он действителен. Я делаю что-то неправильно здесь? Это правильный способ сделать это?

+1

Что вы получаете, когда вы звоните: * Время воспроизведения .getRuntime() .exec ("CMD/с реж .. \\ .. \\ .. \\ ресурсы"); *? – agad

+0

Вы находитесь в одной из виртуальных папок Windows? Пользовательские «Документы» или аналогичные. Они могут вызвать проблемы в командной строке – ikettu

+0

>> Объем в дисководе D является New Volume >> Серийный номер тома является 92A4-BDF7 >> >> Справочник D: \ Software \ затмить >> >> Файл не найден – ihsan

ответ

0

Относительный путь должен работать прямо. Требуется более подробная информация об описании ошибки, которую вы видите, и структуре структуры проекта (где размещается исполняющая банка и где находится папка импорта.)

Другим альтернативным решением является поиск абсолютного местоположения файла исполняемого файла jar. Вы можете получить его с помощью фрагмента кода.

MyClass.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath(); 

Другой файл jar, который должен быть выполнен, должен быть размещен где-то в той же папке или в некоторых дочерних папках.

Теперь удалите текущее имя файла jar из абсолютного пути и добавьте относительный путь к другому файлу jar и выполните его. Он должен работать.

4

Используйте ClassLoader, чтобы получить путь к вашему ресурсу.

String jarPath = this.getClass().getClassLoader().getResource("myJar.jar").getPath();  
String command = "java -jar"; 
String space = " "; 
String params = "-a abc"; 
try { 
    proc = Runtime 
      .getRuntime() 
      .exec(command + space + jarPath + space + params); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Если это время бежал от основного статического метода, то просто замените this.getClass() с YourClass.class.

0

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

public class test { 
    public static void main(String[]args) throws IOException{ 
     String jarPath = test.class.getClass().getResource("/resources/b.jar").getPath();  
     System.out.println("jarPath "+ jarPath); 
//the result path have extra "/" so we have to remove it as follow. 
     jarPath = jarPath.substring(1); 
//and again the result is encoded so we need to decode it back 
     jarPath = URLDecoder.decode(jarPath); 
     Runtime 
     .getRuntime() 
     .exec("java -jar \""+jarPath+"\""); 
    } 

} 

Примечание: Я поместил свою runnable jar в свою папку ресурсов с именем «b.jar».

И вышеуказанные коды нуждаются в некоторой модификации для удовлетворения ваших потребностей. Good Luck

Смежные вопросы