2009-05-13 4 views
3

스윙에서 새 이벤트 발송 스레드를 만들고 싶습니다. 온라인 수행 방법에 대한 온라인 참조가 필요합니다. .NET에서 새 스레드를 만들고 Application.run (...)을 호출하여이 작업을 수행했습니다. 아무도이 짓을 한거야? 스윙에서 가능합니까?다중 스윙 이벤트 발송 스레드

FYI 이유는 내가 이클립스 플러그인을 쓰고 있기 때문에 나는 IDE에 모달이 아닌 대화 상자를 팝업하고 싶지만 내 UI 로직에 모달 (블로킹)하고있다. . 비 모달 대화 상자와 콜백을 사용하여이 작업을 수행 할 수 있지만 코드를 멀티 스레드로 만드는 오버 헤드가 필요합니다. 전 불가능하다면 되돌릴 수 있습니다.

+0

SWT는 Swing EDT를 사용합니까? –

+0

@ mmyers : 제 지식으로는 아니요. – Powerlord

+0

FYI 내 스윙 대화 상자가 IDE를 차단합니다. – dcstraw

답변

5

예, 가능합니다. 스윙에서 여러 EDT 디스패치 스레드 로직을 수행했습니다. 그러나 그물 결과는 그것이 안정적으로 작동하지 않았다는 것이 었습니다.

의 (a) 모든 JVM들은 여러 EDT 스레드 (네이티브 코드와 같은 논리 그래픽 렌더링 동기화 문제는, IBM JVM은 일 JVM & 애플 JVM 일을했다, 여러 EDT 스레드와 함께 실패)

와 함께 잘 작동하지 않습니다

(b) 스윙 렌더링 로직에 버그가있어 랜덤 렌더링 오류가 발생합니다 (예 : http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6727829).

어쨌든, 이렇게하려면 기본적으로 두 개의 AppContext를 설정해야합니다. 각 AppContext에는 고유 한 EDT 스레드가 있습니다.

4

나는 당신의 질문에 약간 혼란 스럽다. 왜냐하면 당신이 스윙을 언급했기 때문에 나는 이클립스 플러그인을 쓰고 있다고 말하기 때문이다. 질문은 스윙 태그이므로, 나는 스윙 응답을 줄 것이다 (그러나 CW로 게시).

하나의 이벤트 발송 스레드가 있습니다. 이벤트 디스패치 스레드가 전혀없는 경우가 아니면 항상 하나의 이벤트 디스패치 스레드가 있습니다. 다른 하나를 만들 수 없습니다.

그러나 대화 상자의 ModalityType을 변경하거나 ModalExclusionType을 변경할 수 있습니다. 이 경우 자신이 직접 작성하는 경우 최상위 창 ModalExclusionTypeAPPLICATION_EXCLUDE으로 설정합니다.

그러나 Eclipse에서 Swing 대신 SWT를 사용하기 때문에 이것이 어떻게 도움이되는지는 알 수 없습니다.

+0

SWT는 비슷한 양식 체계를 사용하는 것으로 보입니다. 따라서 이것이 당신을 올바른 길로 인도 할 수 있습니다. 그러나 나는 그것에 대해 자세히 설명하기에 익숙하지 않다. –

+0

실제로 PlugIn과 WebStart에는 여러 개의 EDT가 있습니다. 그러나 API는 공개되지 않으며 구성 요소를 함께 사용할 수 없습니다. –

+0

Eclipse가 SWT로 작성되었다는 것을 실제로 깨닫지 못했다는 것을 인정해야합니다. 저는 Java에 비교적 익숙하지 않습니다. 배경은 주로 .NET입니다. 그러나 실제로 Eclipse 플러그인에서 Swing 대화 상자를 만들고 표시 할 수 있다는 것을 알고 있습니다. – dcstraw

2

나는 나의 마지막 대답을 쓰다듬어 새롭게 시작할 것이다.

SWT에서는 SWT.PRIMARY_MODAL 스타일 플래그를 생성하는 동안 SWT.PRIMARY_MODAL 스타일 플래그를 전달하여 Shell (창) 또는 Dialog을 부모와 모달로 만들 수 있습니다.

Dialog은 추상적 인 클래스이므로 자신 만의 클래스를 만들어야합니다. Shell을 사용하는 것이 더 쉽습니다.

편집 :

왜 SWT입니까? 이것이 Eclipse가 사용하는 것이기 때문입니다. 자세한 내용은 Eclipse Platform Plug-in Developer Guide (압축 된 PDF)을 참조하십시오. Eclipse의 도움말 시스템 (도움말> 도움말 목차> 플러그인 개발 환경 안내서)에서 최신 버전을 사용할 수 있습니다.

+0

제안 해 주셔서 감사합니다. 그러나 그것은 내가 필요로하는 것을하지 않았다. 나는 본질적으로 modalless 인 모달 타입을 필요로 할 것이다. 심지어 직접적인 부모에게도, open()에 대한 호출을 막는다. – dcstraw