我有一个run()方法,它每秒运行一次,它必须将数据(例如自计时器启动以来的当前时间,以秒为单位)传递给另一个类'Spawner'中的方法。
运行方法:
@Override
public void run() {
counter++;
if(Main.running[0] == true)
{
color = "Red";
spawn = "base";
world = "world";
Spawner spawnerObject = new Spawner();
spawnerObject.loadSpawner(counter, spawn, color, world);
run[0]++;
if(run[0] == 30)
{
Main.running[0] = false;
run[0] = 0;
}
}
}
我不确定,但我得到的是'spawnerObject.loadSpawner(计数器,spawn,颜色,世界);'只能在spawnerObject上有它的起源。
我想要的只是每秒运行一次该方法,但我无法弄清楚如何从'Spawner'调用非静态方法。这是方法:
public void loadSpawner(Integer counter, String spawner, String color, String world)
{ //code
}
有人可以告诉我如何调用该方法吗?我当前使用spawnerObject的事情可能非常糟糕。
错误/堆栈跟踪:
[10:39:24] [Server thread/WARN]: [ColorKeyBattle] Task #5 for ColorKeyBattle v1.0 generated an exception
java.lang.NullPointerException
at org.Ziron5.main.Spawner.loadSpawner(Spawner.java:79) ~[?:?]
at org.Ziron5.main.TimerClass.run(TimerClass.java:59) ~[?:?]
at org.bukkit.craftbukkit.v1_8_R1.scheduler.CraftTask.run(CraftTask.java:71) ~[start.jar:git-Spigot-952179b-43207df]
at org.bukkit.craftbukkit.v1_8_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:350) [start.jar:git-Spigot-952179b-43207df]
at net.minecraft.server.v1_8_R1.MinecraftServer.z(MinecraftServer.java:698) [start.jar:git-Spigot-952179b-43207df]
at net.minecraft.server.v1_8_R1.DedicatedServer.z(DedicatedServer.java:316) [start.jar:git-Spigot-952179b-43207df]
at net.minecraft.server.v1_8_R1.MinecraftServer.y(MinecraftServer.java:623) [start.jar:git-Spigot-952179b-43207df]
at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java:526) [start.jar:git-Spigot-952179b-43207df]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_40]
完成loadSpawner()
方法:
这是一个很长的方法所以我把它放在pastebin上:http://pastebin.com/iDNDSQQc
答案 0 :(得分:0)
也许我有点困惑,但你有loadSpawner作为一个实例方法,并且你希望它可以从类右边访问,或者可以在不创建对象spawnerObject的情况下使用它?
尝试将其更改为
public static void loadSpawner(Integer counter, String spawner, String color, String world)
{
//code
}
然后你可以用
来调用它Spawner.loadSpawner()
答案 1 :(得分:0)
不要在运行中一次又一次地为Spawner创建对象,这将在每次进入run()时生成spawner类的新实例。 使用
public static Spawner spawnerObject = new Spawner();
out side run()就像这样
public static Spawner spawnerObject = new Spawner();
@Override
public void run() {
counter++;
if(Main.running[0] == true)
{
color = "Red";
spawn = "base";
world = "world";
spawnerObject.loadSpawner(counter, spawn, color, world);
run[0]++;
if(run[0] == 30)
{
Main.running[0] = false;
run[0] = 0;
}
}
}
答案 2 :(得分:0)
堆栈跟踪表示在类79
的行Spawner
处抛出异常,这是loadSpawner
方法的一部分。
if(plugin.getLoc(world, "Basespawners", color, "loc1", "Y") < plugin.getLoc(world, "Basespawners", color, "loc2", "Y"))
此时的任何变量都可能是null
。
调试你的代码。
System.out.println(plugin);
System.out.println(world);
System.out.println(color);
为避免再次提出此类问题,我建议您自己学习how to read stacktraces。
答案 3 :(得分:0)
通常我这样做(把它放在Spawner类中):
public static Spawner spawn;
public Spawner getSpawner() {
if(spawn == null) {
spawn = new Spawner();
}
return spawn;
}
现在你可以做到:
Spawner.getSpawner().loadSpawner(...);