简体   繁体   English

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

[英]How to execute jar file from Java code in Net Beans

I have a JAR file("AccessDB.jar" - on executing it, launches a tool). 我有一个JAR文件(“ AccessDB.jar”-执行该文件时,会启动一个工具)。 I have to access this jar file from this location (D:\\NB\\ProjFolder) in Netbeans 7.0. 我必须从Netbeans 7.0中的此位置(D:\\ NB \\ ProjFolder)访问此jar文件。 I tried reading it using ProcessBuilder, but it failed. 我尝试使用ProcessBuilder读取它,但是失败了。

From this java code, I have to launch the tool (in jar file) by reading it. 从此Java代码中,我必须通过阅读来启动该工具(在jar文件中)。 How can the code be modified for this? 如何为此修改代码?

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

Might be possible your .jar isn't executable. 您的.jar可能无法执行。 Instantiate classes or make call to any static method. 实例化类或对任何静态方法进行调用。

Add Main-Class entry while creating a JAR. 创建JAR时添加Main-Class条目。 into manifest file . 进入清单文件。

Then you can use 那你可以用

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

Well it worked for me when I did : 当我这样做时,它对我有用:

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

By the way your question helped me a lot thx :)) 顺便说一句,您的问题对我有很大帮助:))

Try 尝试

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

instead. 代替。 I saw in your code that you do change to the folder D:\\NB\\ProjFolder before starting the Java process and I would also think that should work. 我在您的代码中看到,您确实在启动Java进程之前已更改为文件夹D:\\NB\\ProjFolder ,并且我也认为这样做应该可行。 But using the absolute file name will work for sure. 但是使用绝对文件名肯定会起作用。

If that doesn't work, look at the error message which you get; 如果那不起作用,请查看所收到的错误消息。 that should contain a clue what is wrong. 那应该包含一个线索到底是什么。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM