Поэтому у меня есть класс 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, а затем запустить мое приложение.
Спасибо за любую помощь.
Мы знаем, что программа обновления Sparkle требует вызова в основном потоке (то есть в графическом интерфейсе). Поэтому ваше приложение должно быть запущено для его вызова. Я не думаю, что есть очевидный способ решить эту проблему. Однако,...
Один из способов избежать этой проблемы - установить видимость приложения на false до тех пор, пока пользователь не завершит взаимодействие с вашим обновлением.
Например, вы можете добавить прослушиватель событий в свой JNI или добавить слушателей к потоку обновления. Тем не менее, слушатель в потоке должен возвращать пользовательские действия, а не по окончании.