我有一个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());
}
}
}
答案 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
,我也认为应该可以正常工作。但是使用绝对文件名肯定会起作用。
如果这不起作用,请查看您收到的错误消息;这应该包含一个错误的线索。