2011-06-21 88 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));