Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用newInstance()实例化类时出现NoSuchMethodException_Java_Bukkit - Fatal编程技术网

Java 使用newInstance()实例化类时出现NoSuchMethodException

Java 使用newInstance()实例化类时出现NoSuchMethodException,java,bukkit,Java,Bukkit,我使用以下代码实例化包中的每个类: for (Class listenerClass : ClassGetter.getClassesForPackage(this, "cullan.listener")) { Bukkit.getLogger().info(listenerClass.getSimpleName()); if (!listenerClass.getSimpleName().equals("EnchantmentListener")

我使用以下代码实例化包中的每个类:

        for (Class listenerClass : ClassGetter.getClassesForPackage(this, "cullan.listener")) {
        Bukkit.getLogger().info(listenerClass.getSimpleName());
        if (!listenerClass.getSimpleName().equals("EnchantmentListener")) {
            try {
                listenerClass.newInstance();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
这工作得非常好,但是,当其中一个类被实例化时,我遇到了这个错误:

[07:07:58] [Server thread/WARN]: java.lang.InstantiationException: cullan.listener.AgilityListener$1
    [07:07:58] [Server thread/WARN]:    at java.lang.Class.newInstance(Unknown Source)
    [07:07:58] [Server thread/WARN]:    at cullan.main.DCEnchants.loadEnchants(DCEnchants.java:62)
    [07:07:58] [Server thread/WARN]:    at cullan.main.DCEnchants.onEnable(DCEnchants.java:24)
    [07:07:58] [Server thread/WARN]:    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321)
    [07:07:58] [Server thread/WARN]:    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:340)
    [07:07:58] [Server thread/WARN]:    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405)
    [07:07:58] [Server thread/WARN]:    at net.skycraftmc.PluginManager.PluginManagerPlugin.onCommand(PluginManagerPlugin.java:287)
    [07:07:58] [Server thread/WARN]:    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
    [07:07:58] [Server thread/WARN]:    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141)
    [07:07:58] [Server thread/WARN]:    at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:646)
    [07:07:58] [Server thread/WARN]:    at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:632)
    [07:07:58] [Server thread/WARN]:    at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.java:409)
    [07:07:58] [Server thread/WARN]:    at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:373)
    [07:07:58] [Server thread/WARN]:    at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:709)
    [07:07:58] [Server thread/WARN]:    at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:612)
    [07:07:58] [Server thread/WARN]:    at java.lang.Thread.run(Unknown Source)
    [07:07:58] [Server thread/WARN]: Caused by: java.lang.NoSuchMethodException: cullan.listener.AgilityListener$1.<init>()
    [07:07:58] [Server thread/WARN]:    at java.lang.Class.getConstructor0(Unknown Source)
[07:07:58][Server-thread/WARN]:java.lang.InstantiationException:cullan.listener.AgilityListener$1
[07:07:58][Server thread/WARN]:位于java.lang.Class.newInstance(未知源)
[07:07:58][Server thread/WARN]:在cullan.main.DCEnchants.loadEnchants(DCEnchants.java:62)
[07:07:58][Server thread/WARN]:在cullan.main.DCEnchants.onEnable(DCEnchants.java:24)
[07:07:58][Server thread/WARN]:位于org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321)
[07:07:58][Server thread/WARN]:位于org.bukkit.plugin.java.javapluginload.enablePlugin(javapluginload.java:340)
[07:07:58][Server thread/WARN]:位于org.bukkit.plugin.SimplePluginManager.enablepluginmanager(SimplePluginManager.java:405)
[07:07:58][Server thread/WARN]:在net.skycraftmc.PluginManager.PluginManagerPlugin.onCommand(PluginManagerPlugin.java:287)
[07:07:58][Server thread/WARN]:位于org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
[07:07:58][Server thread/WARN]:位于org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141)
[07:07:58][Server thread/WARN]:位于org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:646)
[07:07:58][Server thread/WARN]:位于org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:632)
[07:07:58][Server-thread/WARN]:在net.minecraft.Server.v1_8_R3.dicatedserver.aO(dicatedserver.java:409)
[07:07:58][Server thread/WARN]:在net.minecraft.Server.v1_8_R3.dicatedserver.B(dicatedserver.java:373)
[07:07:58][Server thread/WARN]:位于net.minecraft.Server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:709)
[07:07:58][Server thread/WARN]:在net.minecraft.Server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:612)
[07:07:58][Server thread/WARN]:位于java.lang.thread.run(未知源)
[07:07:58][Server thread/WARN]:原因:java.lang.NoSuchMethodException:cullan.listener.AgilityListener$1。()
[07:07:58][Server thread/WARN]:位于java.lang.Class.getConstructor0(未知源)
这是引发错误的类:

    package cullan.listener;
import cullan.type.EnchantmentRarity;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;

import java.util.ArrayList;
import java.util.List;

public class AgilityListener extends EnchantmentListener{

    private List<Player> players = new ArrayList<>();

    public AgilityListener() {
        super(Enchantment.getByName("Agility"), EnchantmentRarity.VERY_RARE);
        startTimer();
    }

    @EventHandler
    public void onQuit(PlayerQuitEvent event) {
        Player player = event.getPlayer();
        if (players.contains(player)) {
            players.remove(player);
        }
    }

    private void startTimer() {
        final PotionEffect effect = mainConfig.getAgilityEffect();
        instance.getServer().getScheduler().scheduleSyncRepeatingTask(instance, new Runnable() {
            @Override
            public void run() {
                for (Player player : instance.getServer().getOnlinePlayers()) {
                    ItemStack boots = player.getInventory().getBoots();
                    if (boots != null && boots.containsEnchantment(enchantment)) {
                        player.addPotionEffect(effect);
                        players.add(player);
                    } else if (players.contains(player)) {
                        player.removePotionEffect(effect.getType());
                        players.remove(player);
                    }
                }
            }
        }, 10L, 10L);
    }
}
包cullan.listener;
导入cullan.type.enchanmentrarity;
导入org.bukkit.enchanments.enchanment;
导入org.bukkit.entity.Player;
导入org.bukkit.event.EventHandler;
导入org.bukkit.event.player.PlayerQuitEvent;
导入org.bukkit.inventory.ItemStack;
导入org.bukkit.potion.PotionEffect;
导入java.util.ArrayList;
导入java.util.List;
公共类AgilityListener扩展了EnchantmentListener{
private List players=new ArrayList();
公共AgilityListener(){
超级(附魔,敏捷),附魔稀有,非常罕见);
startTimer();
}
@事件处理程序
public void onQuit(PlayerQuitEvent事件){
Player=event.getPlayer();
if(player.contains(player)){
玩家。移除(玩家);
}
}
私有void startTimer(){
最终PotioneEffect effect=mainConfig.getAgilityEffect();
instance.getServer().getScheduler().scheduleSyncRepeatingTask(实例,新的Runnable()){
@凌驾
公开募捐{
对于(Player-Player:instance.getServer().getOnlinePlayers()){
ItemStack boots=player.getInventory().getBoots();
if(boots!=null&&boots.containsenchant(附魔)){
玩家。添加药剂效果(效果);
players.add(player);
}else if(players.contains(player)){
player.removePotionEffect(effect.getType());
玩家。移除(玩家);
}
}
}
},10L,10L);
}
}

如果删除startTimer()方法,则不会发生此错误。为什么会发生这种情况?

问题在于您没有试图构造
AgilityListener
的实例-您正在尝试构造在
AgilityListener.startTimer
中创建的匿名内部类的实例。这就是为什么堆栈跟踪具有:

Caused by: java.lang.NoSuchMethodException: cullan.listener.AgilityListener$1.<init>()
或:


等等。您还可以检查该类是否具有公共无参数构造函数,以及它是否可分配给
EnchantmentListener

您的问题是什么?你是在问为什么会这样吗?@SotiriosDelimanolis是的
if (!listenerClass.getSimpleName().equals("EnchantmentListener") &&
    !listenerClass.getSimpleName().contains("$")) 
!listenerClass.isAnonymousClass()