我正在使用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);
}
}
答案 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
方法的关注点。