1

私は音楽プレーヤーを実装しようとしています。Threadから拡張されたクラスを作成し、そのStart()-メソッドを上書きしてランダムな曲を再生しました。

曲の再生は機能しますが、そのスレッドをバックグラウンドに送信したいのですが、機能しません。

File file = new File("song.mp3");
PlayEngine plengine = new PlayEngine(); //This class extends from Thread

plengine.Play(file); //This just sets the file to play in a variable
plengine.Start(); //And this finally plays the file itself

System.out.println("Next task:"); // I don't get to this point. Only when the song has finished.

上記のコードでわかるように、スレッドを起動した直後に印刷された行に移動したいと思います。

4

3 に答える 3

6

拡張することはお勧めしませんThread-代わりにPlayEngine実装を行い、メソッドRunnableをオーバーライドします。run

class PlayEngine implements Runnable {
    private final File file;

    PlayEngine(File file) {
        this.file = file;
    }

    @Override
    public void run() {
        //do your stuff here
        play(file);
    }
}

次に、トレッドを次のように開始します。

PlayEngine plengine = new PlayEngine(file);
Thread t = new Thread(plengine);
t.start();
System.out.println("Next task:");

Next taskすぐに印刷する必要があります。あなたの例でplayは、メインスレッドで長時間実行されているメソッドを呼び出しているようです。これは、すぐに返されない理由を説明しています。

于 2012-10-27T11:09:28.213 に答える
2

その上書きStart()

私はあなたがオーバーライドしたのではないかと思いますがThread.start()、これは決して機能しません。スレッドThread.run()に独自のインスタンスをオーバーライドまたは提供します。Runnable

于 2012-10-27T11:12:04.640 に答える
0

最初にログPlayEngineのrunメソッドを実行する必要があると思います。さらに、runメソッドではなくstartメソッド(メインスレッドで実行)で再生コードを記述したようです。バックグラウンドで再生を行うには、コードをオーバーライドして、startinrunメソッドに入れます。

于 2012-10-27T11:14:15.267 に答える