2011-06-21 58 views
1

我有一个JAR文件(“AccessDB.jar” - 执行它时启动一个工具)。我必须从Netbeans 7.0中的这个位置(D:\ NB \ ProjFolder)访问这个jar文件。我尝试使用ProcessBuilder读取它,但失败了。如何从Java Bean中的Java代码执行jar文件

从这个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()); 
} 
} 
} 
+0

我面临着一些问题,对3D设计的产品之一,其期待一个可执行的JAR文件到具体行动上运行,我做什么是创建一个批处理文件(Windows)工作时这将有命令执行你的jar文件(如果安装了JRE)。并从应用程序执行批处理文件。 - 我搜索了“为Java Jar文件创建EXE” - 希望这能帮助你!尝试使用'Runtime.getRuntime()。exec(“批处理文件完整路径”);' – RajeshS

+0

它可能工作,如果AccessDB.jar是我认为绝对路径,而不是使用pb.directory。 – RobotRock

回答

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

顺便说你的问题帮了我很多:) THX)

+0

你的代码将会失败:'C:\ Program:No such file or directory'。如果将命令的所有部分粘贴到单个字符串中,则空格成为问题。不要这样做。 –

+0

我编辑了我的答案...这种方式与我完全一样...尝试一下,如果它可以工作,你可以删除-1:P –

+0

代码现在可以工作,但我仍然不建议使用“把所有东西在一个字符串“方法;它总是脆弱的。 –

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,我也认为这应该起作用。但使用绝对文件名肯定会起作用。

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

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