1

我正在尝试实现一个音乐播放器。我写了一个从 Thread 扩展的类,并重写了它的 Start()-Method 来播放一首随机歌曲。

播放歌曲有效,但我想将该线程发送到后台,这不起作用:

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 的运行方法。此外,您似乎已经在 start 方法(在主线程中运行)而不是 run 方法中编写了播放代码。要在后台完成播放,请将代码放在 run 方法的 start 中,方法是覆盖它。

于 2012-10-27T11:14:15.267 回答