【问题标题】:Calling the method on an instance rather than the class not working with static type调用实例上的方法而不是不使用静态类型的类
【发布时间】:2015-07-06 22:08:59
【问题描述】:

我目前正在尝试创建一个插件,但我遇到了一个错误,该错误不允许我调用方法,因为对于方法中发生的某些事情,它需要是静态的。

我通过使用:package.Main main = new package.Main(); 解决了这个问题。

现在,我剩下的问题是,当我实际调用该方法时,使用 main.method(); 它说上面的代码需要是静态的,但是当我这样做时,它会在控制台中返回此错误。

org.bukkit.command.CommandException: Unhandled exception executing command 'devmode' in plugin DevelopmentMode v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:140) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:621) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1079) [craftbukkit.jar:git-Bukkit-e91aed8]
        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:939) [craftbukkit.jar:git-Bukkit-e91aed8]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(SourceFile:37) [craftbukkit.jar:git-Bukkit-e91aed8]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(SourceFile:9) [craftbukkit.jar:git-Bukkit-e91aed8]
        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [craftbukkit.jar:git-Bukkit-e91aed8]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.7.0_71]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.7.0_71]
        at net.minecraft.server.v1_8_R3.SystemUtils.a(SystemUtils.java:19) [craftbukkit.jar:git-Bukkit-e91aed8]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:676) [craftbukkit.jar:git-Bukkit-e91aed8]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:335) [craftbukkit.jar:git-Bukkit-e91aed8]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:632) [craftbukkit.jar:git-Bukkit-e91aed8]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:540) [craftbukkit.jar:git-Bukkit-e91aed8]
        at java.lang.Thread.run(Unknown Source) [?:1.7.0_71]
Caused by: java.lang.ExceptionInInitializerError
        at package.commands.devModeClickCommands.Main(devModeClickCommands.java:22) ~[?:?]
        at package.commands.devMode.onCommand(devMode.java:60) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        ... 15 more
Caused by: java.lang.IllegalArgumentException: Plugin already initialized!
        at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:98) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:66) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        at package.devmode.Main.<init>(Main.java:12) ~[?:?]
        at package.commands.activateDevMode.<clinit>(activateDevMode.java:20) ~[?:?]
        at package.commands.devModeClickCommands.Main(devModeClickCommands.java:22) ~[?:?]
        at package.commands.devMode.onCommand(devMode.java:60) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        ... 15 more
Caused by: java.lang.IllegalStateException: Initial initialization
        at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:101) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:66) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        at package.devmode.Main.<init>(Main.java:12) ~[?:?]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)~[?:1.7.0_71]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)~[?:1.7.0_71]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.7.0_71]
        at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:1.7.0_71]
        at java.lang.Class.newInstance(Unknown Source) ~[?:1.7.0_71]
        at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:52) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:129) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:328) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:251) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugins(CraftServer.java:288) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.reload(CraftServer.java:719) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        at org.bukkit.Bukkit.reload(Bukkit.java:543) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:140) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:621) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:607) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.java:371) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:336) ~[craftbukkit.jar:git-Bukkit-e91aed8]
        ... 3 more

任何帮助都会很棒,谢谢!

编辑 - 代码示例

我试图调用的方法在我的 Main 类中的一个单独的包中:

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

在这里,我试图从不同的类、不同的包中调用上述方法。

public class class {

    package.Main main = new package.Main();

    public static void activate(Player player) {
        main.newCountdown();
    }

【问题讨论】:

  • 如果您尝试从静态方法内部调用实例方法或引用实例属性,则会导致错误。
  • 我们需要查看相关的代码。编译器永远不会接受使用静态方法中的非静态字段。
  • 您正在尝试创建插件的新实例?
  • 我还是个java新手,但我会尽力回复。我将在我的问题的编辑中发布我的代码的更多详细信息。

标签: java static minecraft bukkit


【解决方案1】:

基于这一行Caused by: java.lang.IllegalArgumentException: Plugin already initialized!,插件已经在其他地方初始化,所以这个调用是多余的。查看 bukkit 论坛中的this thread 以获得更详细的说明。

【讨论】:

  • 感谢您的帮助,非常感谢,我知道 Bukkit 不是您所做的,但是是的,这两种情况都不适用于我的代码:/
猜你喜欢
  • 1970-01-01
  • 2020-01-22
  • 1970-01-01
  • 2016-08-15
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
相关资源
最近更新 更多