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() 메서드가 끝나면이 문제가 해결되지만 문제에 대한 최선의 해결책인지 확실하지 않습니다. 아이디어가 있습니까? 사전
JPA를 사용하고 있으며 저장하는 유일한 것은 EntityManagerFactory이며 Persistence.createEntityManagerFactory()를 사용하여 만듭니다. 이것이 문제입니까? – SzaboAdam
EntityManagerFactroy는'close()'메소드를 가지고 있는데 Javadoc은 다음과 같이 말합니다 : _ 팩토리를 닫고 보유하고있는 모든 자원을 해제하십시오. 팩토리 인스턴스가 닫힌 후에는, 불려가는 모든 메소드는 isOpen를 제외 해, IllegalStateException를 Throw합니다. isOpen는 false를 돌려줍니다. EntityManagerFactory가 닫히면 모든 엔티티 관리자가 닫힌 상태로 간주됩니다. _ –
EMF를 닫으면 해결됩니다. – SzaboAdam