나는 만들고있는 프로그램을 업데이트하는 시작 프로그램을 만들려고 시도하고 있지만 몇 가지 문제가 있습니다. 런처의 무게가 가볍기 때문에 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;
}
}
[Thread.join?] (http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#join()) – immibis
@immibis 죄송합니다, 잘못된 주제 이름입니다. 제 2의 프로그램 스레드에 액세스 할 수 없습니다. – Yemto
@Yemto : "두 번째 프로그램"이라고 할 때 실제로 다른 JVM 프로세스가 종료 될 때까지 기다리는 중입니까? 그렇지 않다면,'Thread.getAllStackTraces(). keySet()'을 호출하여 현재 JVM에있는 실행중인 모든 스레드 목록을 가져올 수 있으며, 현재 스레드 인'Thread.currentThread()'를 필터링 할 수 있습니다. –