所以我有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);
}
}和main类,我在其中启动我的独立应用程序并使用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窗口中的操作,然后启动我的应用程序。
谢谢你的帮助。
发布于 2018-01-28 15:30:18
我们所知道的是Sparkle updater requires to be called on the main thread (即GUI线程)。因此,您的应用程序需要运行才能调用它。我不认为有一个明显的方法来解决这个问题。然而,..。
你可以绕过这个问题的一种方法是将你的应用的可见性设置为false,直到用户完成与你的更新程序的交互。
例如,您可以添加事件listener to your JNI或add listeners to your updater thread。但是,线程上的侦听器需要在用户操作时返回,而不是在完成时返回。
https://stackoverflow.com/questions/22662681
复制相似问题