这一行
player = (Player) player.getClass().getInputStream("/sound.wav");
给你一个ClassCastException,因为你试图将InputStream 转换成Player。那是错误的。此行正确将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");
这里有一些BlackBerry docs on the Player。即使您可能在不同的 J2ME 平台上,我认为可能适用相同的生命周期规则:
玩家有五种状态:未实现、已实现、预取、已启动、
已关闭。
这些生命周期状态的目的是提供程序化的
控制可能耗时的操作。例如,当
首先构造一个 Player,它处于 UNREALIZED 状态。
从 UNREALIZED 过渡到 REALIZED,播放器执行
定位所需的所有资源所需的通信
功能(例如与服务器或文件系统通信)。这
实现方法允许应用程序启动这个潜在的
在适当的时间进行耗时的过程。
通常,玩家从 UNREALIZED 状态移动到 REALIZED
状态,然后进入 PREFETCHED 状态,最后进入 STARTED
状态。
播放器在到达媒体末尾时停止;或当停止
方法被调用。发生这种情况时,玩家会从
STARTED 状态回到 PREFETCHED 状态。然后准备重复
循环。
要使用播放器,您必须设置参数来管理其移动
通过这些生命周期状态,然后通过这些状态移动它
使用 Player 的状态转换方法。
更新: 因为您似乎关心代码复杂性,也许 deallocating (?) 对象,here is a code sample,希望说明它不应该是太难了。您只需获取该答案中的代码,并使其成为您传递 autio 文件名称 (musicFile) 的方法。