2010-07-01 51 views
1

我很新编程....所以我正在制作一个音乐播放器,需要一些功能 我需要在两个课程中同时处理一个事件。 例如...在Java中的事件是在一个单独的线程中处理,或者我必须自己做?

播放器在自己的线程上播放音乐,当这个音乐完成时,它触发musicFinished(MusicEvent),转到播放列表类并询问ForAnotherMusicToPlay(),然后再次开始播放。 当musicFinished发生时,所有这一切都发生在同一时间: - 正在监听事件的记录器将其写入日志文件。 (这里是否需要另一个线程,或者该事件已经在另一个线程中处理?) -GUI显示音乐完成,更新标签并将时钟设置为0.(为此,我将使用SwingUtilities.invokeLater,对吗? )

那么这种情况最好的解决方案是什么?制作我自己的活动?线程怎么样?我是否必须自己做?我已经搜索了它,发现actionPerformed在EDT(Event Dispatching Thread)中执行,但我不知道其他事件。他们都是? 谢谢

回答

0

从EDT调用所有Swing事件处理程序。另外,SwingUtilities.invokeLater也会在EDT中运行你的代码,它只会等待所有未处理的事件处理程序被调用。我不确定这是否是你想要的 - 如果没有,你需要开始你自己的线程。

+0

所以我只需要让我自己的事件,扩展java.util.EventObject?当它启动时,它将在EDT上处理?因此,为了更新GUI,我可以在事件hanlder中编写GUI代码,并且为了制作其他内容,我将启动另一个线程。 谢谢 – fredcrs 2010-07-01 12:23:20

+0

我在这里做了一些测试,并意识到我创建的扩展java.util.EventObject事件被触发时,不在EDT中处理。 我用SwingUtilities.isEvenItDispatchingThread()。 这是在我的主线上处理的 – fredcrs 2010-07-01 22:35:49