如何在netbean中从Java代码执行jar文件

如何在netbean中从Java代码执行jar文件,java,netbeans,Java,Netbeans,我有一个JAR文件(“AccessDB.JAR”-执行它时,启动一个工具)。我必须从Netbeans 7.0中的这个位置(D:\NB\ProjFolder)访问这个jar文件。我尝试使用ProcessBuilder读取它,但失败了 从这个java代码中,我必须通过读取来启动工具(在jar文件中)。如何对此修改代码 public class classAccessDB { public void GenerateAccessDB() { Runtime run = Runtime.get

我有一个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());   
}
}
}

当我这么做的时候,它对我起了作用:

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

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

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());   
}
}
}
顺便说一句,你的问题对我帮助很大(谢谢:)

试试看

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
,我也认为这应该是可行的。但使用绝对文件名肯定会奏效

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

试试看

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
,我也认为这应该是可行的。但使用绝对文件名肯定会奏效


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

可能您的.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));

可能您的.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));

我在处理一个3d设计产品时遇到了一些问题,该产品希望在特定操作上运行一个可执行的jar文件,我所做的是创建一个批处理(windows)文件,该文件将具有执行jar文件的命令(如果安装了JRE)。并从应用程序执行批处理文件。-我在谷歌上搜索了“为Java Jar文件创建EXE”-希望这能帮助你!!!!尝试使用
Runtime.getRuntime().exec(“批处理文件完成路径”)如果AccessDB.jar是一个绝对路径,而不是使用pb.directory,那么它可能会起作用。我在一个3d设计产品上工作时遇到了一些问题,该产品希望在特定操作上运行一个可执行的jar文件,我所做的是创建一个批处理(windows)文件,该文件将具有执行jar文件的命令(如果安装了JRE)。并从应用程序执行批处理文件。-我在谷歌上搜索了“为Java Jar文件创建EXE”-希望这能帮助你!!!!尝试使用
Runtime.getRuntime().exec(“批处理文件完成路径”)
如果AccessDB.jar是一个绝对路径,而不是使用pb.directory,那么它可能会工作。您的代码将失败:
C:\Program:没有这样的文件或目录
。如果将命令的所有部分粘贴到单个字符串中,则空格将成为一个问题。不要那样做。我编辑了我的答案。。。这种方法对我非常有效。。。试试看,如果可以的话,你可以删除-1:p代码现在可以了,但我仍然不建议使用“把所有东西放在一个字符串中”的方法;它总是脆弱的。好的,谢谢你的建议:))你的代码将失败,原因是:
C:\Program:没有这样的文件或目录
。如果将命令的所有部分粘贴到单个字符串中,则空格将成为一个问题。不要那样做。我编辑了我的答案。。。这种方法对我非常有效。。。试试看,如果可以的话,你可以删除-1:p代码现在可以了,但我仍然不建议使用“把所有东西放在一个字符串中”的方法;好的,谢谢你的建议:))