gpt4 book ai didi

java - 在 JFugue 中暂停音乐

转载 作者:行者123 更新时间:2023-12-01 14:58:51 25 4
gpt4 key购买 nike

我正在开发一个通过多线程在后台播放音乐的程序,因为否则 GUI 会卡住。我有多线程的基本知识( volatile 、同步等),但我想知道如何立即停止/暂停线程(即使进程正在处理)。我有音乐在后台循环播放,但如果我将停止变量挂接到循环上,则歌曲必须停止播放才能停止。所以我的问题仍然存在,从父线程有什么方法可以立即暂停或终止歌曲中间的音乐,因为我在它之后要播放音频。

最佳答案

首先,线程中的大多数循环应类似于以下内容:

while(!isInterrupted()) {
try {
// do something (like play song)
} catch (InterruptedException e) {
interrupt();
}
}

如果循环内存在阻塞调用(从您的描述来看这似乎是这样),它们可能允许interrupt()。从线程外部调用 Interrupt() 将打破阻塞调用并将您转储到 catch block 中。这最终会清除“中断”标志,因此您需要再次调用中断才能跳出循环。

取决于您播放音乐的方式:

  • 如果您使用的库具有“暂停”或“停止”方法来播放音乐,则可以直接使用它。看起来您正在使用 jFugue - 它的播放器有一个暂停()方法 - 您尝试过调用它吗?
  • 如果您正在做其他事情,则需要跟踪歌曲的位置并在线程上调用interrupt()。如果您想重新启动,则需要返回到跟踪的位置

请注意,如果您想重新启动上述循环,则需要一个嵌套循环,例如:

while(true) {
while(!isInterrupted()) {
...
}
}

如果只有 !isInterrupted() 循环,线程将完成,并且无法重新启动。

希望这有帮助!

关于java - 在 JFugue 中暂停音乐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13984039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com