J2me 应用程序在多个时间文件播放时出现内存不足异常

Posted

技术标签:

【中文标题】J2me 应用程序在多个时间文件播放时出现内存不足异常【英文标题】:J2me application out of memory exception on multiple time file play 【发布时间】:2012-07-17 11:52:41 【问题描述】:

在我的 j2me 应用程序中,每次用户单击某个项目时,我都必须播放一个小声音文件。但问题是当我多次播放声音文件时,比如在 10-14 次之后它给了我 内存不足异常。虽然我每次播放文件时都会释放播放器,但仍然如此 给出内存不足异常:这是代码sn-p,

public void playSound(String soundFile) 
    try
        if (player!=null)    
            try 
                player.deallocate(); //deallocate the unnecessary memory.
             catch (Exception ex) 
                player=null;  
                System.gc();
            
        

        player = Manager.createPlayer(getClass().getResourceAsStream(musicFolder + soundFile), "audio/mpeg");
        // player = Manager.createPlayer(is, "audio/mpeg");
        player.realize();

        // get volume control for player and set volume to max
        VolumeControl vc = (VolumeControl) player.getControl("VolumeControl");
        if (vc != null) 
            vc.setLevel(100);
        

        player.prefetch();
        player.start();
        isException=false;
     catch (Exception e) 

         isException=true;
    

谁能告诉我出了什么问题?

【问题讨论】:

请添加手机制造商和型号。此外,代码中的一个指示,您肯定知道哪一行代码会抛出什么 java.lang.Throwable 【参考方案1】:

要记住的三件事

如果您要多次播放相同的声音,您可能希望预取一个播放器并简单地启动它多次。

当你想正确清理播放器时,你应该调用 Player.close()

您可能希望使用媒体事件侦听器来独立于用户输入来关闭和/或重新启动播放器。

【讨论】:

【参考方案2】:

我觉得你也应该打电话

player.close() 

紧接着

player.deallocate();

根据文档“当 deallocate 返回时,播放器处于 UNREALIZED 或 REALIZED 状态。”但是close更进一步……“当方法返回时,Player处于CLOSED状态,不能再使用了。”

【讨论】:

【参考方案3】:

我不确定为什么取消分配不起作用。我想要么取消分配比创建一个新的需要更长的时间,要么取消分配由于某种原因而失败。是否有一个 player.stop() 来匹配 player.start()?

要尝试的另一件事(如果没有别的,为了好的形式:) 是不要创建新播放器,除非您需要/应该这样做。 IE。移动

  if(player!=null)   

所以它也涵盖了

    player = Manager.createPlayer(getClass().getResourceAsStream(musicFolder + soundFile), "audio/mpeg");

HTH!

【讨论】:

以上是关于J2me 应用程序在多个时间文件播放时出现内存不足异常的主要内容,如果未能解决你的问题,请参考以下文章

在火花提交作业中读取镶木地板文件时出现内存不足错误

读取块中的csv文件时出现内存不足错误

尝试添加现有类模块时出现内存不足错误 VB6

Powershell - 针对大型目录运行脚本时出现内存不足错误

使用 VisualVm 分析堆转储时出现内存不足错误

超过 128MB 的纹理时出现 OpenGL“内存不足”错误