Как выполнить файл JAR из кода Java в Net Beans - PullRequest
1 голос
/ 21 июня 2011

У меня есть JAR-файл («AccessDB.jar» - при его запуске запускает инструмент).Мне нужно получить доступ к этому файлу JAR из этого места (D: \ NB \ ProjFolder) в Netbeans 7.0.Я попытался прочитать его с помощью ProcessBuilder, но это не удалось.

Из этого кода Java, я должен запустить инструмент (в файле JAR), прочитав его.Как можно изменить код для этого?

public class classAccessDB {

public void GenerateAccessDB() {
    Runtime run = Runtime.getRuntime(); 
try 
{
     ProcessBuilder pb = new ProcessBuilder("C:\\Program Files\\Java\\jdk1.6.0_20\\bin\\java.exe", "-jar", "AccessDB.jar");
     pb.directory(new File("D:\\NB\\ProjFolder")); 
     Process p = pb.start(); 
     InputStream is = p.getInputStream(); 
     BufferedReader br = new BufferedReader(new InputStreamReader(is)); 

     String resultOutput = br.toString(); 
     System.out.println(resultOutput); 
}
catch(Exception E) 
{
     E.printStackTrace();
     System.out.println(E.getMessage());   
}
}
}

Ответы [ 3 ]

1 голос
/ 28 января 2015

Возможно, ваш .jar не является исполняемым.Создайте классы или вызовите любой статический метод.

Добавьте запись основного класса при создании JAR. в файл манифеста.

Затем вы можете использовать

Process ps=Runtime.getRuntime().exec(new String[]{"java","-jar","yourJar.jar"});
        ps.waitFor();
        java.io.InputStream is=ps.getInputStream();
        byte b[]=new byte[is.available()];
        is.read(b,0,b.length);
        System.out.println(new String(b));
0 голосов
/ 28 января 2015

Попробуйте

ProcessBuilder pb = new ProcessBuilder(
    "C:\\Program Files\\Java\\jdk1.6.0_20\\bin\\java.exe",
    "-jar",
    "D:\\NB\\ProjFolder\\AccessDB.jar");

.Я видел в вашем коде, что вы переходите в папку D:\NB\ProjFolder перед запуском процесса Java, и я также думаю, что это должно работать.Но использование абсолютного имени файла будет работать наверняка.

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

0 голосов
/ 28 января 2015

Ну, это сработало для меня, когда я сделал:

public class classAccessDB {

public void GenerateAccessDB() {
Runtime run = Runtime.getRuntime(); 
try 
{
 ProcessBuilder pb = new ProcessBuilder("\"C:\\Program Files\\Java\\jdk1.6.0_20\\bin\\java\" -jar \"D:\\NB\\ProjFolder\\AccessDB.jar\"");

 Process p = pb.start(); 
 InputStream is = p.getInputStream(); 
 BufferedReader br = new BufferedReader(new InputStreamReader(is)); 

 String resultOutput = br.toString(); 
 System.out.println(resultOutput); 
}
catch(Exception E) 
{
  E.printStackTrace();
  System.out.println(E.getMessage());   
}
}
}

Кстати, ваш вопрос мне очень помог, спасибо:))

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