在完成同样的事情但在另一个类中时获取NullPointerException

时间:2016-03-04 16:26:00

标签: java nullpointerexception

我想在方法参数中使用Track创建一个play()方法但是我不能在我的控制器类中执行此操作,因为play是一个动作而action不能有参数(或者它必须是ActionEvent)

所以我想创建另一个类来应用播放逻辑而只是在新类中传递给这个方法,而不是在那里做任何事情。

@FXML
private void play() {
    play.setText("Pause");
    Track selectedTrack = playingTable.getSelectionModel().getSelectedItem();

    if (selectedTrack != null && selectedTrack != playingTrack) {
        player.stopSong();
        player = new TrackPlayer(selectedTrack);
        playingTrack = selectedTrack;
        player.playSong();
    } else {
        switch (player.getStatus()) {
            case READY:
                player.playSong();
                break;
            case PLAYING:
                player.pauseSong();
                play.setText("Play");
                break;
            case PAUSED:
                player.playSong();
                play.setText("Pause");
                break;
            default:
                System.out.println("Wtf?");
        }
    }
    updateInfo();
}

这是我的play()方法,现在在我的控制器类中(它正常工作)。我想改变它,所以我可以做以下

if(selectedTrack != null) {
    manager.play(selectedTrack);
} else {
    System.out.println("Track not selected / null");
}

经理是另一个具有以下方法的课程

public void play(Track track) {
    controller.setPlayTxt("Pause");

    if (track != null && track != playingTrack) {
        player.stopSong();
        player = new TrackPlayer(track);
        playingTrack = track;
        player.playSong();
    } else {
        switch (player.getStatus()) {
            case READY:
                player.playSong();
                break;
            case PLAYING:
                player.pauseSong();
                controller.setPlayTxt("Play");
                break;
            case PAUSED:
                player.playSong();
                controller.setPlayTxt("Pause");
                break;
            default:
                System.out.println("Wtf?");
        }
    }
}

然而,每当我点击一首歌曲(非空)并按下播放时,我就会在manager.play(selectedTrack);

行上看到NullPointerException

为什么呢?我知道该对象不是null,并且检查它,这与我最初完成的方式完全相同(可行)但当我将其更改为传递给另一个类时,我得到NullPointerException。

1 个答案:

答案 0 :(得分:0)

“manager”为null,而不是“selectedTrack”。您提供的代码不足以说明为什么“manager”为null,但这就是问题所在。如果您需要更多帮助,请发布更多代码。

在错误运行的代码之前,您在哪里分配给“manager”?

从下面的评论中,听起来好像提问者在抛出的代码之前没有分配到“manager”字段。解决方案是将TrackPlayerManager对象分配给“manager”字段。