Page 1 of 1

애플릿의 팝업 창이 닫힌 후 입력포커스 반환 문제

Posted: 2009 10 21 17:07 07
by gomsugy
안녕하세요?
파이어폭스에서 애플릿 구동 시, 입력포커스와 관련해서 다음과 같은 현상이 발생하오니,
검토 부탁 드립니다.

오류 개요

* 자바애플릿 초기화 시에 사용자 안내를 위한 팝업창('잠시 기다려 주십시오..' 기능)
이 열렸다가 자동으로 닫힌 이후, 브라우저의 입력 컨트롤(<input> 태그의 type=text
또는 <textarea>)으로 포커스가 가지 않음. 마우스로 입력창을 클릭해도 포커스를
얻지 못함. <input>태그의 type=button 등은 정상적으로 클릭됨.


오류 발생 환경

* JavaSE 6.0
- [Java 제어판] > [고급]에서 '차세대 Plug-In을 활성화합니다. ...'가 활성화
된 환경.

* FireFox
- 버전 3.5.3
- 버전 3.0 대 브라우저


애플릿 동작 얼개

1) 웹 브라우저에 의해서 호출되는 java.applet.Applet.init()에서 애플릿 프로그램
초기화 시작.
2) java.applet.Applet.init()에서 사용자 안내 메시지 ('초기화 중입니다. 잠시 기
다려 주십시오.')를 보여주기 위해서 javax.swing.JDialog로 안내창 생성.
3) javax.swing.JDialog의 생성자에서 스레드를 생성해서 어플리케이션 초기화 코드 수
행. 초기화 코드 수행 후 2초마다 이벤트를 받도록 타이머 실행.
4) javax.swing.JDialog의 생성자를 빠져 나온 후, 2초마다 발생되는 이벤트에서 주기적
으로 초기화 스레드 종료 여부 확인.
5) 초기화 스레드가 종료되면, java.swing.JDialog가 닫힘.
6) 웹 브라우저로 입력 포커스가 반환됨.


상세 오류 현상

* 인터넷 익스플로러, 사파리, 오페라, 크롬 브라우저는 위의 '6) 웹 브라우저로 입력
포커스가 반환됨.' 단계에서 <input> 태그의 type=text 또는 <textarea> 필드를 마우
스로 클릭하면 입력 대기중인 캐럿이 깜빡거림. (정상 동작함)

* 파이어폭스의 경우
- <input> 태그의 type=text 또는 <textarea> 필드에 문자를 입력하기 위해 마우스로
클릭해도 포커스가 가지 않음. (캐럿이 나타나지 않음.)
- 같은 페이지 내의 버튼 등 다른 컴포넌트는 정상 동작함.
- '파일', '편집', '보기' 등의 메뉴가 회색으로 나타나서 파이어폭스의 메뉴가 비활
성화된 것처럼 보임. 그러나, 클릭하면 메뉴는 정상적으로 동작함.
- 마우스로 파이어폭스 이외의 다른 창을 클릭했다가 다시 파이어폭스를 클릭하면,
정상적으로 포커스가 이동됨.

* JavaVM과의 연관성
- 이 오류 현상은 JavaSE6에서 차세대 플러그인 기능을 사용할 때만 발생함.
[Java 제어판] > [고급]에서 '차세대 Plug-In을 활성화합니다. ...'가 체크되어 있
을 경우에만 오류 발생.
- JavaSE5 또는 그 이하에서는 정상 동작함.
- JavaSE6에서도 '차세대 Plug-In을 활성화합니다. ...'체크를 해제하면 정상 동작함.

* 버전 3.x 대의 모든 파이어폭스 브라우저에서 이러한 현상 발생.


발생 빈도

* '오류 발생 환경' 조건에서는 항상 발생.