如何在顶部的if中使用sp变量?

时间:2015-10-24 11:55:31

标签: java minecraft bukkit

我正在使用this API处理Minecraft Bukkit插件。 我遇到的问题是我想在下面的代码中使用sp变量,在顶部的if语句中使用.isplaying()(API的一种方法)来检查它是否正在播放。问题是,sp变量是在if语句中创建的。那么当再次运行该方法时,如何在if语句中使用该sp变量?

如果我不够清楚,请告诉我。 我也是java的新手,所以记住这一点。

-JustRamon

public void playTune(String eventTune, Player p)
{
    if (Methods.getSongPath(eventTune).exists()) //&& sp.isplaying()
    {
            Song s = NBSDecoder.parse(Methods.getSongPath(eventTune));
            SongPlayer sp = new RadioSongPlayer(s);
            sp.setAutoDestroy(true);
            sp.addPlayer(p);
            sp.setPlaying(true);
    }
    else
    {
            notFound(eventTune);
    }
}

1 个答案:

答案 0 :(得分:0)

首先,如果要通过多次调用方法来访问对象,则需要对该对象的引用。所以你应该在中声明一个变量,如下所示:

private SongPlayer sp; 

然后按如下方式更改您的方法:

public void playTune(String eventTune, Player p)
{
    /*Creates sp if it is null (When it is null, we know that there is no
    RadioSongPlayer object referenced by sp)*/
    if (Methods.getSongPath(eventTune).exists()) && sp == null)
    {
            Song s = NBSDecoder.parse(Methods.getSongPath(eventTune));
            sp = new RadioSongPlayer(s);
            sp.setAutoDestroy(true);
            sp.addPlayer(p);
            sp.setPlaying(true);
    }
    else
    {
            notFound(eventTune);
    }
    //Now that sp is not null, we know that it references a SongPlayer object, that is,
    //the object we just created in the first if statement
    if(sp != null){ /
        //sp was created
        //Use sp
    }
}

我不会建议你这样做。最好将您的第一个if重构为另一种方法,因为创建SongPlayer不应该是您playTune方法的关注点。

相关问题