3

Java Swing アプリケーションに自動更新と再起動機能を導入するにはどうすればよいですか。また、以前のバージョンにロールバックする必要がありました。アプリケーション jar ファイルと、アプリケーション jar ファイルを起動するランチャー jar ファイルを作成しました。この試みは成功しました。しかし、MacOSX のインストーラーを作成するときに、これら 2 つの jar ファイルを統合することはできません。

以下のLauncher classとおりです。

public class Launcher {

private final Logger logger = Logger.getLogger(Launcher.class.getName());

private String getVersionNumber() throws IOException {
    try {
        JarFile runningJarFile = new JarFile(new File("Application.jar"));
        String versionNumber = runningJarFile.getManifest()
                .getMainAttributes().getValue("Bundle-Version");
        runningJarFile.close();
        logger.log(
                Level.SEVERE,
                new StringBuilder()
                        .append("The version number of existing Application.jar file is ")
                        .append(versionNumber).toString());
        return versionNumber;
    } catch (IOException e) {
        logger.log(
                Level.SEVERE,
                new StringBuilder()
                        .append("Could not read the version number from existing Application.jar")
                        .append(Arrays.toString(e.getStackTrace()))
                        .toString());
        throw new IOException(e);
    }
}

private void updateApplication() {
    try {
        File updateDirectory = new File("Update");
        if (updateDirectory.isDirectory()) {
            if (updateDirectory.list(new FilenameFilter() {
                @Override
                public boolean accept(File dir, String name) {
                    return name.startsWith("\\.");
                }
            }).length > 0) {
                String versionNumber = getVersionNumber();
                logger.log(
                        Level.SEVERE,
                        new StringBuilder()
                                .append("A new update is available. Rename the existing Application.jar to ")
                                .append(versionNumber)
                                .append(".jar")
                                .append(" and rename the new_Application.jar to Application.jar")
                                .toString());
                File Application = new File("Application.jar");
                Application.renameTo(new File(new StringBuilder()
                        .append(versionNumber).append(".jar").toString()));
                File newApplication = new File("Update/new_Application.jar");
                newApplication.renameTo(new File("Application.jar"));
                newApplication.delete();
            }
        }
    } catch (Exception e) {
        logger.log(Level.SEVERE,
                new StringBuilder().append("Could not update Application")
                        .append(Arrays.toString(e.getStackTrace()))
                        .toString());
    }
}

private void launchApplication() {
    try {
        logger.log(Level.SEVERE, "Lauching Application.jar");
        ProcessBuilder pb = new ProcessBuilder("Java", "-jar", "Application.jar");
        pb.start();
    } catch (IOException e) {
        logger.log(Level.SEVERE,
                new StringBuilder().append("Could not launch Application.jar ")
                        .append(Arrays.toString(e.getStackTrace()))
                        .toString());
    }
}

private void quitLauncher() {
    logger.log(Level.SEVERE, "Launcher is exiting");
    System.exit(0);
}

private void startApplication() {
    updateApplication();
    launchApplication();
    quitLauncher();
}

public static void main(String[] args) {
    Launcher launcher = new Launcher();
    launcher.startApplication();
}

}

ありがとう

4

1 に答える 1

1

まず、標準のインストーラー パッケージ (mpkg または pkg) を作成していますか?

ランチャーに更新をダウンロードさせてから実行する必要があります ( /usr/sbin/installer を使用)。その後、インストーラーには、自分の名前のアプリを強制終了する postflight/postinstall/postprocessing スクリプトが含まれている必要があります (これは、指定された名前のプロセスを探すのと同じくらい難しい場合があります..)、最近インストールされたアプリを起動します。

これにより、最初のインストール後でもアプリが起動されます (これを回避して、更新であるかどうかを確認することができます - ランチャーの "updating.txt" からマーカー ファイルを保存するだけで十分な場合があります)。

インストーラー パッケージを作成する方法の完全なガイドは次のとおりです (ほぼスクラッチ): Making OS X Installer Packages like a Pro - Xcode Developer ID ready pkg

または、このクールなツールを使用することもできます: http://s.sudre.free.fr/Software/Packages/about.html

これはすべて、あなたが探しているものにとってやり過ぎではないと思います。

于 2013-06-06T13:42:51.217 に答える