我编写的 Java 应用程序依赖于小型 C 程序。我决定将该程序的可执行版本放在资源中,当用户启动我的应用程序时,应用程序将创建该程序的临时版本,并在关闭时将其删除。
这是主java程序的构造函数:
public RankingCreator(String title) {
super(title);
if (!tempJudgeCreated) { // static variable
try {
InputStream istream = (InputStream) getClass().getResourceAsStream("/res/IOIJudge");
byte[] tempJudgeBytes = new byte[SIZE_OF_JUDGE];
istream.read(tempJudgeBytes);
istream.close();
FileOutputStream ostream = new FileOutputStream(JUDGE);
ostream.write(tempJudgeBytes);
ostream.flush();
ostream.close();
Runtime.getRuntime().exec("chmod 777 " + JUDGE); // this line creates confusion
tempJudgeCreated = true;
} catch (IOException e) {
e.printStackTrace();
}
}
}
当我在 Eclipse 中时,这可以完美地工作,但是当我将它导出到可运行的 JAR 中时,此代码会失败,甚至不会进入 GUI 部分。当我删除 Runtime.getRuntime()... 时,它会进入 GUI,但我没有必要的权限来使用它(临时程序)。