播放文件wav j2me - Manager.createPlayer()中的IllegalArgumentException

时间:2012-07-12 16:42:07

标签: java-me midp mmapi

我的应用程序中有关于播放wav文件的问题。

这是我的错误:

java.lang.IllegalArgumentException
 at javax.microedition.media.Manager.createPlayer(), bci=8
 at Tajwid.Tajwid.run(Tajwid.java:649)
 at Tajwid.Tajwid.actionPerformed(Tajwid.java:186)
 at com.sun.lwuit.util.EventDispatcher.fireActionSync(), bci=19
 at com.sun.lwuit.util.EventDispatcher.fireActionEvent(EventDispatcher.java:257)

这是我的代码:

public void run() {
    try {
        InputStream is = getClass().getResourceAsStream("/tes.wav");
        player = Manager.createPlayer(is, "audio/x-wav");

        player.realize();
        // get volume control for player and set volume to max
        vc = (VolumeControl) player.getControl("VolumeControl");
        if (vc != null) {
            vc.setLevel(100);
        }
        player.prefetch();
        player.start();
    } catch (Exception e) {
        e.printStackTrace();
    }

设备配置:CLDC-1.1
设备配置文件MIDP 2.0

1 个答案:

答案 0 :(得分:1)

您获得的错误消息有足够的信息来确定代码中出错的地方。

仔细看看:

    java.lang.IllegalArgumentException
     at javax.microedition.media.Manager.createPlayer()...

它说Manager.createPlayer()出了问题。从您的代码中可以看出,您使用方法Manager.createPlayer(java.io.InputStream stream, java.lang.String type)

如果您针对所使用的方法(available online)查看 API文档,则会在发生此异常时找到解释:

    Throws:
        java.lang.IllegalArgumentException - Thrown if stream is null. 

上述表示传递给方法的stream参数(代码中为is)为空。

您可以在初始化is后立即添加一些日志记录,以便更轻松地调试此问题:

InputStream is = getClass().getResourceAsStream("/tes.wav");
// add some logging to see if initialization was OK or not:
System.out.println("input stream is null: [" + (is == null) + "]");

这样,在模拟器中运行MIDlet时,您将看到is是否按预期进行了初始化。

实际上,查看代码我猜你在文件名中输了一个拼写错误传递给getResourceAsStream:“/ tes.wav”看起来像是错误输入的“/ test。 WAV“即可。