3

我有一堂课可以无限循环播放游戏的背景音乐。我希望它在另一个类调用 BackgroundMusic 对象上的 stopPlaying() 方法时停止。根据 Oracle 文档,没有办法停止 Java 中的线程。

它说使用一个变量,当变量为某个值时它会检查并停止。我尝试进行布尔运行,当我调用 stopPlaying() 时将其设置为 false,并尝试使 while 循环作为条件而不是 true 运行,但这没有延迟。(之前编辑的消息)

我会把我的课程放在这里,但是这个网站一直说它的格式不正确,我以前做过(从 Eclipse 粘贴)。我把它放在 PasteBin 上:http: //pastebin.com/edCH2DXE

4

1 回答 1

1

这有点像一把大锤子,但你可以通过调用来中断musicThread.interrupt()线程。这将导致isInterrupted()返回true音乐线程。如果线程当时正在执行一些阻塞 I/O,这可能会导致InterruptedException被抛出,因此您还需要捕获它:

  try {
    while (!Thread.currentThread().isInterrupted()) {
       // play music
    }
  } catch (InterruptedException ex) {
    // any cleanup necessary
  }

同样,这是一个大锤子,如果可以的话,最好使用布尔标志方法。

于 2013-04-21T08:40:54.883 回答