1

我编写的 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,但我没有必要的权限来使用它(临时程序)。

4

0 回答 0