从线程内部获取对象引用

时间:2018-01-07 19:16:36

标签: java multithreading mp3

我程序中的一个功能是播放Mp3文件。我正在使用JLayer库(http://www.javazoom.net/javalayer/javalayer.html)来实现这一目标。

另外,为了防止在歌曲播放时阻止节目,我想使用Threads。请参阅此代码段:

import javazoom.jl.player.Player;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class P2PClient {

    private static Player player;

    public static void main (String[] args) {
        try {
            play(args[0]);
        } catch (FileNotFoundException | javazoom.jl.decoder.JavaLayerException e) {
            e.printStackTrace();
        }

        System.out.println("Hello");
        player.close();

    }

    private static void play(String track) throws FileNotFoundException, javazoom.jl.decoder.JavaLayerException {
         new Thread() {
            private Player player = new Player(new FileInputStream(track));

            @Override
            public void run() {
                try {
                    P2PClient.player = this.player;
                    player.play();
                } catch (javazoom.jl.decoder.JavaLayerException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
}

播放有效。此外,打印“Hello”,因此我知道play(args[0])没有阻止当前线程。什么不起作用的是player.close()行......相反,我在这一行得到了一个N​​ullPointerException。 我希望在匿名线程实例中引用player,并且仍然通过调用void play(String track)“自动启动”该线程。因此,我采用了一种在private static Player类中声明P2PClient变量的丑陋方法。

我不明白为什么我得到这个NullPointerException ...如果这是一种不正确的方法来完成我想要的,如何在不返回player对象的情况下获得Thread引用?

0 个答案:

没有答案