2015-02-02 7 views
0

나는 만들고있는 프로그램을 업데이트하는 시작 프로그램을 만들려고 시도하고 있지만 몇 가지 문제가 있습니다. 런처의 무게가 가볍기 때문에 timer.schedule(this, 0, checkVersionTime);을 사용하여 매번 새로운 버전을 확인합니다. (정확한 시간은 필요하지 않습니다. 기본값은 10 초입니다).메서드가 true를 반환하기를 기다리는 중

문제는 제대로 대신 힘의 프로그램을 닫으을 닫습니다 requestStop를 호출,이 코드

if(!isOutdated(lastModified, sFile)) 
    continue; 

if(scanner != null && !scanner.hasStopped()) 
    scanner.requestStop(); 

if((scanner == null || scanner.hasStopped())){ 
    downloadList.add(new QueuedFile(sUrl, fileId, sFile, lastModified)); 
} 

스캐너 변수는 다른 프로그램을 포함합니다. 실행기가 실행될 때 실행기가 프로그램이 종료되었음을 감지하고 업데이트로 시작하기까지 최대 10 초가 걸릴 수 있습니다.

requestStop()을 호출 한 후 시작 프로그램이 앉아서 프로그램이 닫힐 때까지 기다릴 수 있습니까?

편집 : 이 다른 프로그램이 시작되는 방법이다, 나는 그것이 당신은 shutdown hook으로 실행을 등록 할 수 있습니다

public boolean load(File file){ 
    try{ 
     //Setup and load the class 
     URL[] urls = {file.toURI().toURL()}; 
     URLClassLoader loader = new URLClassLoader(urls); 
     Class<?> clazz = loader.loadClass("scanner.Scanner"); 
     scannerObject = clazz.getConstructor().newInstance(); 
     return true; 
    }catch(Exception e){ 
     return false; 
    } 
} 
+5

[Thread.join?] (http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#join()) – immibis

+0

@immibis 죄송합니다, 잘못된 주제 이름입니다. 제 2의 프로그램 스레드에 액세스 할 수 없습니다. – Yemto

+0

@Yemto : "두 번째 프로그램"이라고 할 때 실제로 다른 JVM 프로세스가 종료 될 때까지 기다리는 중입니까? 그렇지 않다면,'Thread.getAllStackTraces(). keySet()'을 호출하여 현재 JVM에있는 실행중인 모든 스레드 목록을 가져올 수 있으며, 현재 스레드 인'Thread.currentThread()'를 필터링 할 수 있습니다. –

답변

0

제 2의 JVM으로 간주하고이이 때를 수행 할 것입니다 확실하지 않다 주 앱이 종료됩니다 (실제 KILL 신호로 사망 한 경우 제외).

관련 문제