我正在尝试实现音乐播放器。 我写了一个从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.
正如您在上面的代码中所看到的,我想在启动线程后立即转到打印行。
答案 0 :(得分: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
,这解释了为什么它不会立即返回。
答案 1 :(得分:2)
覆盖了
Start()
我怀疑你覆盖Thread.start()
,这将永远不会奏效。覆盖Thread.run()
或提供您自己的Runnable
实例到线程。
答案 2 :(得分:0)
我认为你应该首先打开日志PlayEngine的run方法。此外,您似乎已经在start方法(在主线程中运行)而不是run方法中编写了回放代码。要在后台完成播放,请将代码置于run方法的start中,方法是覆盖它。