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