2014-03-26 4 views
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); 
    } 
} 

그리고 내 독립 실행 형 응용 프로그램을 시작하고 사용하는 메인 클래스 스파클

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 창에서 사용자로부터 가져온 다음 내 앱을 시작합니다.

도움 주셔서 감사합니다.

답변

0

는 우리가 알고있는 것은 그 스파클 업데이터 requires to be called on the main thread (즉, GUI 스레드)입니다. 따라서 앱을 실행하려면 앱을 실행해야합니다. 나는이 문제를 해결할 분명한 방법이 있다고 생각하지 않는다. 그러나 ...이 문제를 회피 할 수

한 가지 방법은 사용자가 귀하의 갱신과 상호 작용이 완료 될 때까지 false로 앱의 가시성을 설정하는 것입니다.

예를 들어, 이벤트 listener to your JNI 또는 add listeners to your updater thread를 추가 할 수 있습니다. 그러나, 스레드에서 리스너 대신 완료 할 때의 사용자 작업에 반환해야합니다.