2010-07-01 4 views
1

Im 프로그래밍에 익숙하지 않아 .... 음악 제작 중 일부 기능이 필요한 플레이어 2 개 클래스에서 동시에 하나의 이벤트를 처리해야합니다. 예 :자바의 이벤트는 분리 된 스레드에서 처리됩니까? 아니면 직접 처리해야합니까?

플레이어가 자체 스레드에서 음악을 재생 중입니다.이 음악이 끝나면 musicFinished (MusicEvent)가 재생되고 Playlist 클래스로 이동 한 다음 askForAnotherMusicToPlay()가 다시 재생됩니다. musicFinished가 발생하면이 모든 일이 동시에 발생합니다 : - 이벤트를 듣고있는 Logger는 로그 파일에 기록합니다. (여기에 다른 스레드가 필요합니까? 아니면 이벤트가 이미 다른 스레드에서 처리되고 있습니까?) - GUI에서 음악이 끝났음을 표시하고 레이블을 업데이트하고 시계를 0으로 설정합니다.이 경우 SwingUtilities.invokeLater를 사용하겠습니까?)

그래서이 경우 가장 좋은 해결책은 무엇일까요? 내 이벤트 만들기? 스레드는 어떻습니까? 나는 그때 나 자신을 만들어야 만합니까? 나는 이미 그것을 검색하고 actionPerformed가 EDT (Event Dispatching Thread)에서 실행되었다는 것을 알았지 만 다른 이벤트를 알지 못합니다. 그들 모두가 ??? 감사합니다.

답변

0

모든 스윙 이벤트 핸들러는 EDT에서 호출됩니다. 또한 SwingUtilities.invokeLater도 EDT에서 코드를 실행합니다. 대기중인 모든 이벤트 핸들러가 호출 될 때까지 대기합니다. 나는 이것이 당신이 원하는 것인지 확신하지 못합니다. 그렇지 않다면, 당신 자신의 실을 시작할 필요가 있습니다.

+0

그래서 그냥 내 자신의 이벤트를 만들 필요가 java.util.EventObject 연장 ?? 화재가 발생하면 EDT에서 처리됩니까? 그래서 GUI를 업데이트하기 위해 이벤트 hanlder에 GUI 코드를 작성하고 다른 스레드를 만들기 위해 다른 스레드를 시작하겠습니까 ?? 감사합니다. – fredcrs

+0

나는 여기 몇몇 고환을 만들었고, 내가 해고 될 때 java.util.EventObject를 확장 한 이벤트가 EDT에서 처리되지 않았다는 것을 깨달았습니다. SwingUtilities.isEvenItDispatchingThread()를 사용했습니다. 내 메인 스레드에서 처리되었습니다. – fredcrs

관련 문제