所以我正在制作这个构建器,它应该只是制作一个 config.java 文件,将配置信息放入其中。编译它。然后用它更新现有的 jar。我一切正常,我没有收到任何错误,但是当我这样做时,Runtime.getRuntime().exec("jar uf "+out+" "+ cClass);
它似乎失败了。我已经尝试获取所述命令的输出,但它没有显示任何内容。我也尝试手动执行此操作,并且效果很好。所以我的问题是,出了什么问题,我该如何解决?
Runtime.getRuntime().exec("javac "+config);
File cClass = new File (config.getParentFile().getAbsolutePath() +"/configs.class");
Runtime.getRuntime().exec("jar uf "+out+" "+ cClass);
out是要更新的jar文件,config是config.java cClass是config.class
这是我的整个 UpdateJar 类
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
public class cmd extends Thread{
private File out;
private File config;
public cmd(File out, File config){
this.out = out;
this.config = config;
this.start();
}
public void run(){
try {
Thread.sleep(5000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
try {
Process p = Runtime.getRuntime().exec("jar uvf "+out+" "+config.getParentFile().getAbsolutePath()+("/configs.class"));
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(p.getErrorStream()));
System.out.println(stdInput.readLine());
System.out.println(stdError.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
}
它返回的输出是这样的:
2013-03-28 20:18:58.363 null
2013-03-28 20:18:58.363 [parsing started RegularFileObject[/Users/jorisbolsens/Desktop/configs.java]]
2013-03-28 20:19:04.364 adding: Users/jorisbolsens/Desktop/configs.class(in = 767) (out= 512)(deflated 33%)
2013-03-28 20:19:04.364 null
出于好奇,我提取了我的 out.jar 的所有文件,发现它configs.class
实际上被放入了 jar 中,它只是被放入了一个文件夹中。具体来说users.jorisbolsens.Desktop
。