2014-12-29 1 views
1

후 나는 자바 FX 애플리케이션을 만든 남아 있고, 내가 메인 무대를 닫은 후, 다음과 같은 상황이 발생 것으로 나타났습니다 :자바 FX 8 JVM이 종료

  • 어플 "정지"방법이 주요 방법
  • 라고 프로그램이 main 메소드 잎 후
  • 을 계속 JVM은 (적어도,하지 명시 적으로) 내가 어떤 스레드를 생성하지 않는

을 닫을 수 없습니다. 이 시점에서 실행되는 스레드 (디버그 콘솔)은 다음과 같습니다

  • InvokeLaterDispatcher
  • 프리즘 글꼴 디스 포저
  • '풀-2 스레드-1'(나는 이것이 무엇인지 모른다 - ThreadPoolExecutor에 부품
  • HSQLDB 타이머 (내가 개발/디버그 시스템에 HSQLDB 파일 DB)
  • FX 액세스 스레드 (비주얼 디버거)
  • 버려진 연결 정리 스레드를 사용하고 있습니다)의 스택 트레이스에

JVM 종료를 막을 수있는 스레드는 다음 중 어느 것입니까? 나는 여기에

내 응용 프로그램 코드 ...이 모든 데몬 스레드해야한다고 생각 :

public class MainApp extends Application { 

@Override 
public void start(Stage stage) throws Exception {  
    final FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/Main.fxml")); 
    Parent root = fxmlLoader.load(); 

    Scene scene = new Scene(root); 
    scene.getStylesheets().add("/styles/Styles.css"); 

    //... Scene/stage setup here 
    stage.show(); 
} 

@Override 
public void stop() throws Exception { 
    super.stop(); 
} 

public static void main(String[] args) { 
    launch(args); 
} 
} 

을 System.exit 추가 (0); stop() 메서드가 끝나면이 문제가 해결되지만 문제에 대한 최선의 해결책인지 확실하지 않습니다. 아이디어가 있습니까? 사전

답변

1

당신은 당신이 HSQLDB를 사용하는 말에

들으, 당신은 당신이 그것을 초기화 코드를 표시하지 않습니다. stop() 메서드에서 해당 연결을 닫습니다.

+0

JPA를 사용하고 있으며 저장하는 유일한 것은 EntityManagerFactory이며 Persistence.createEntityManagerFactory()를 사용하여 만듭니다. 이것이 문제입니까? – SzaboAdam

+0

EntityManagerFactroy는'close()'메소드를 가지고 있는데 Javadoc은 다음과 같이 말합니다 : _ 팩토리를 닫고 보유하고있는 모든 자원을 해제하십시오. 팩토리 인스턴스가 닫힌 후에는, 불려가는 모든 메소드는 isOpen를 제외 해, IllegalStateException를 Throw합니다. isOpen는 false를 돌려줍니다. EntityManagerFactory가 닫히면 모든 엔티티 관리자가 닫힌 상태로 간주됩니다. _ –

+0

EMF를 닫으면 해결됩니다. – SzaboAdam