这条线
player = (Player) player.getClass().getInputStream("/sound.wav");
给你 aClassCastException
因为你试图将 aInputStream
转换成 a Player
。那是错误的。此行正确地将 a 分配Player
给您的player
变量:
player = Manager.createPlayer(getClass().getInputStream("/sound.wav"), "audio/x-wav");
如果你愿意,你可以在重放声音的时候一次又一次地使用我的第二行。您将只是重新创建播放器。如果您不更改声音文件(.wav),那么当声音播放完毕后,我会再次启动它而不创建新播放器:
player.start(); // restart the same sound
但是,如果您要更改使用的声音文件,createPlayer
再次调用可能会更容易:
player = Manager.createPlayer(getClass().getInputStream("/another_sound.wav"), "audio/x-wav");
以下是 Player 上的一些BlackBerry 文档。即使您可能在不同的 J2ME 平台上,我认为可能适用相同的生命周期规则:
玩家有五种状态:未实现、已实现、预取、已启动、已关闭。
这些生命周期状态的目的是提供对潜在耗时操作的编程控制。例如,当第一次构建 Player 时,它处于 UNREALIZED 状态。从 UNREALIZED 过渡到 REALIZED,播放器执行必要的通信来定位它运行所需的所有资源(例如与服务器或文件系统通信)。实现方法允许应用程序在适当的时间启动这个潜在的耗时过程。
通常,玩家从 UNREALIZED 状态移动到 REALIZED 状态,然后到 PREFETCHED 状态,最后进入 STARTED 状态。
播放器在到达媒体末尾时停止;或调用 stop 方法时。发生这种情况时,播放器会从 STARTED 状态移回 PREFETCHED 状态。然后准备好重复该循环。
要使用 Player,您必须设置参数以管理其在这些生命周期状态中的移动,然后使用 Player 的状态转换方法在这些状态中移动它。
更新:由于您似乎关心代码复杂性,并且可能会取消分配(?)对象,这里有一个代码示例,希望能说明它不应该太难。您只需获取该答案中的代码,并使其成为您传递 autio 文件 ( musicFile
) 名称的方法。