加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 实现空while循环以保持控制的更好方法

发布时间:2020-12-15 04:18:31 所属栏目:Java 来源:网络整理
导读:我正在播放背景音频,我希望程序的控制保持静止,直到音频播放结束,因为我使用空循环,如下所示 while(isPlaying==true){};mediaPlayer.stop(); 正如您所看到的,while循环保持程序控制直到音频播放,然后执行下一条指令.这工作正常,但我发现这不是一个正确的方法
我正在播放背景音频,我希望程序的控制保持静止,直到音频播放结束,因为我使用空循环,如下所示

while(isPlaying==true){};
mediaPlayer.stop();

正如您所看到的,while循环保持程序控制直到音频播放,然后执行下一条指令.这工作正常,但我发现这不是一个正确的方法来做空 – 虽然昂贵,我正在寻找替代方案.请帮忙.

解决方法

假设你的程序是Java(…为什么你给它三个语言标签?)你有几个选择.您可以使用适当的同步事件,例如:

// fields
Object playerStopEvent = new Object();
boolean isPlaying;

// in your media player,when playback is complete:
synchronized (playerStopEvent) {
   isPlaying = false;
   playerStopEvent.notifyAll();
} 

// elsewhere,when waiting for playback to complete:
synchronized (playerStopEvent) {
   while (isPlaying) {
       try {
           playerStopEvent.wait();
       } catch (InterruptedException x) {
           // abort or ignore,up to you
       }
    }
}
mediaPlayer.stop();

有关更多示例,请参阅Guarded Blocks的官方教程.

你也可以让mediaPlayer在完成时调用一些回调,例如在开始播放时禁用GUI组件,并在调用完成的回调时重新启用它们(您也可以在此处使用事件侦听器方法).

没有更多的信息,我推荐后者,因为它不会阻止你在播放器播放时做其他无关的事情(或者让你的程序完全不响应),但前者可能更合适,具体取决于你的情况.

如果它在C或C中,则概念是相同的.使用与第一个选项相同的条件变量/事件,或者对第二个选项使用的任何等效的回调/侦听器/信号槽.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读