gpt4 book ai didi

java - 从未扩展 JavaPlugin 的类引用 'this'

转载 作者:行者123 更新时间:2023-12-01 11:20:42 25 4
gpt4 key购买 nike

我正在尝试制作一个使用此方法启动调度程序任务的插件:

public void newCountdown() {
Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
public void run() {
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
player.sendMessage("Hey");
}
}
}, 0, 20);
}

问题是,当我尝试调用该方法时,它说它需要是静态方法。然后,当我将其更改为静态时,第一个参数“this”表示它不能在静态上下文中使用。

当方法不是静态时,scheduleSyncRepeatingTask 显示此错误:

The method scheduleSyncRepeatingTask(Plugin, Runnable, long, long) in the type BukkitScheduler is not applicable for the arguments (activateDevMode, new Runnable(){}, int, int)

当我尝试它提供的任何快速修复时,它总是会导致另一个错误。

有没有办法从 Main 类引用 this 而不必将我的方法设为静态?

最佳答案

这不起作用的原因是 staticthis永远不要一起去。一个简单的思考方式是,static 删除了 Java 的面向对象部分。 this 是一个关键字,指向类的当前实例,不能与 static 一起使用,因为使用 static 变量就像完全删除实例全部在一起。

您必须将 this 更改为 Main 类的实例(扩展 JavaPlugin 的实例)。您可以初始化静态变量onEnable()来存储实例

public static Main that; //"Main" will be replaced with the name of your Main class

@Override
public void onEnable(){
//set that to an instance of your Main class (this)
that = this;
}

@Override
public void onDisable(){
//set that to null to prevent memory leaks
that = null;
}

现在,您可以通过将 that 替换为 this 来使您的 newCountdown() 方法静态化

public static void newCountdown() {
Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(Main.that, new Runnable() {
public void run() {
for(Player player : Bukkit.getServer().getOnlinePlayers()){
player.sendMessage("Hey");
}
}
}, 0, 20);
}

关于java - 从未扩展 JavaPlugin 的类引用 'this',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31257935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com