我有一个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());
}
}
}发布于 2015-01-28 22:43:22
您的.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));发布于 2015-01-28 22:21:08
当我这样做的时候,它对我来说是有效的:
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:)
发布于 2015-01-28 22:25:10
试一试
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,我也认为这应该是可行的。但是使用绝对文件名肯定可以。
如果这不起作用,请查看您得到的错误消息;它应该包含错误的线索。
https://stackoverflow.com/questions/6420862
复制相似问题