Как ждать действий пользователя в Sparkle Updater (Java-приложение)?

1

Поэтому у меня есть класс SparkleAcrivator

public class SparkleActivator {
    private static boolean sparkleLibLoaded = false;
    //private String downloadLink;
    private String menuItemTitle;

    public native static void initSparkle(String pathToSparkleFramework,
                                          boolean updateAtStartup,
                                          int checkInterval,
                                          /*String downloadLink,*/
                                          String menuItemTitle);

    private boolean updateAtStartup = true;
    private int checkInterval = 86400;

    public SparkleActivator(/*String downloadLink, */String menuItemTitle) {
        //this.downloadLink = downloadLink;
        this.menuItemTitle = menuItemTitle;
    }

    public void start() throws Exception {
        try {
            if(!SparkleActivator.sparkleLibLoaded) {
                System.loadLibrary("sparkle_init");
                SparkleActivator.sparkleLibLoaded = true;
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            return;
        }

        initSparkle(System.getProperty("user.dir") + "/../../Frameworks/Sparkle.framework",
                updateAtStartup, checkInterval, /*downloadLink, */menuItemTitle);
    }
}

И основной класс, где я запускаю свое отдельное приложение и использую Sparkle

public static void main(final String... args) {

                if (Helper.isOsx()) {

                    try {
                        sparkleActivator.start();
                    }    catch (Exception e) {
                        new ExceptionHandler(true, 19).handleException(new NotFountSparkleInitException());
                        return;
                    }
                    SwingUtilities.invokeLater(new Runnable() {
                        public void run() {                             
                                initApp();

                        }
                    });
                }
                else {                  

    }

Там проблема Sparkle, и мое приложение запускается почти одновременно, но мне нужно подождать действия от пользователя в окне Sparkle, а затем запустить мое приложение.

Спасибо за любую помощь.

Теги:
macos
sparkle

1 ответ

0

Мы знаем, что программа обновления Sparkle требует вызова в основном потоке (то есть в графическом интерфейсе). Поэтому ваше приложение должно быть запущено для его вызова. Я не думаю, что есть очевидный способ решить эту проблему. Однако,...

Один из способов избежать этой проблемы - установить видимость приложения на false до тех пор, пока пользователь не завершит взаимодействие с вашим обновлением.

Например, вы можете добавить прослушиватель событий в свой JNI или добавить слушателей к потоку обновления. Тем не менее, слушатель в потоке должен возвращать пользовательские действия, а не по окончании.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню