如何从Net Beans中的Java代码执行jar文件

时间:2011-06-21 05:44:25

标签: java netbeans

我有一个JAR文件(“AccessDB.jar” - 在执行它时,启动一个工具)。我必须从Netbeans 7.0中的这个位置(D:\ NB \ ProjFolder)访问这个jar文件。我尝试使用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 个答案:

答案 0 :(得分:1)

您的 .jar 可能无法执行。实例化类或调用任何静态方法。

在创建JAR时添加Main-Class条目。到清单文件中。

然后你可以使用

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));

答案 1 :(得分:0)

当我这样做时,它对我有用:

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());   
}
}
}

顺便说一下,你的问题对我有很多帮助:))

答案 2 :(得分:0)

尝试

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

代替。我在您的代码中看到您在启动Java进程之前更改了文件夹D:\NB\ProjFolder,我也认为应该可以正常工作。但是使用绝对文件名肯定会起作用。

如果这不起作用,请查看您收到的错误消息;这应该包含一个错误的线索。