0

다양한 OS X 버전의 Apple JVM이 WindowClosing 이벤트를 생성하지 못한다는 점에서 분명히 망가졌습니다 (예를 들어, 응용 프로그램의 기본 JFrame을 클릭하여 닫으면 닫기 버튼).호환되지 않는 JVM이 WindowClosing 이벤트를 보내지 않는 문제를 해결했습니다.

는 (가장 최근의 애플 자바 업데이트에서는 생성 할 수있는 이벤트를 강제 속성을 설정할 수 있지만, 이것은 내가 무엇을 찾고되지 않습니다)

내 문제는 간단하다 : 나는 싶습니다 사용자가 앱을 닫을 때 "팁"을 표시하십시오. 그러나 사용자가 창을 닫았 음을 감지하지 못했습니다 (이벤트가 생성되지 않았기 때문에). 그러나 분명히 종료 후크에서 JFrame의를 만드는

Runtime.getRuntime().addShutdownHook(...) 

가 문제가있는 것 같다 : 그것은 종료 후크가 호출되면 EDT 이미 사라 경우처럼

그래서 나는 셧다운 후크를 사용할 수 있다고 생각.

나는 여러 가지를 시도했지만 아무런 의미가없는 것 같습니다. 내 "팁"JFrame이 모든 회색 (종료 훅이 아닌 어디서나 호출되었을 때 제대로 작동 함에도 불구하고) 또는 프로그램이 즉시 종료되는 것과 같습니다. 나는 래치를 사용하고 셧다운 훅에서 래치를 기다렸지 만 EDT가 더 이상 존재하지 않는 것처럼 보였다.

나는 현재 툴팁을 표시하기 위해 두 번째 Java 앱을 생성하는 것을 진지하게 고려하고 있지만 다소 과잉이라고 생각합니다.하지만 적어도 작동 할 것입니다.

종료 훅에서 창을 만들고 EDT에서 작업을 시도한 사람이 있습니까? 알고 있어야 할 문제가 있습니까? (오랫동안 알려지지 않은 애플 VM 버그로 인해 OS X에서 윈도우 닫기 이벤트를 안정적으로 잡을 수는 없다는 것을 기억하십시오).

+1

이 OS X 버그에 익숙하지 않습니다. 이것에 대한 참조/링크가 있습니까? –

+0

어, 내가 닫을 때 앱이 원하는 마지막 것은 다른 것입니다. –

+0

@Dave Newton : 앱을 닫을 때 창 팝업이 나타나는 것은 매우 일반적입니다. 예를 들어, "xxx 파일을 저장하지 않았습니다. 끝내기 전에 저장 하시겠습니까?"라고 묻는 창을 팝업하는 소프트웨어가있을 수 있습니다. –

답변

1

창이 실제로 닫히고 응용 프로그램이 중지되면 뭔가가 JFrame.dispose() 메소드를 호출하고 있습니다. 이를 덮어 쓰고 거기에 코드를 추가하십시오.

그렇지 않으면 창 수신기의 닫힌 메소드를 수신하는 데몬 스레드를 추가 할 수 있습니다. 데몬은 툴팁을 추가 한 다음 창을 삭제할 수 있습니다. 툴팁이 완료 될 때까지 처분을 지연시킬 수 있습니다.

나는이 버그에 대해 들어 본 적이 없지만 사과가 자체 jdk를 공개하지 않는다면 상황은 더 좋아질 수 있습니다.