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 に答える