首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >吗啡mongodb上的InstantiationException

吗啡mongodb上的InstantiationException
EN

Stack Overflow用户
提问于 2017-08-17 23:31:22
回答 1查看 284关注 0票数 0

我试图将一个类嵌入到一个集合中,并将该集合插入到一个morphia实体上,但是它返回这个堆栈跟踪。

这也是我第一次在吗啡实体中使用抽象类,也是第一次看到这个错误。

我使用了一个抽象类,因为当玩家通过执行/kit选择他的工具包时,我需要触发执行方法,播放机拥有的所有工具包都存储在一个集合中,并插入到我的mongodb文档中,它保存下来,但是当尝试触发执行方法时,它会返回该错误。

代码语言:javascript
复制
Caused by: java.lang.InstantiationException
    at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48) ~[?:1.8.0_131]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_131]
    at org.mongodb.morphia.mapping.DefaultCreator.createInstance(DefaultCreator.java:72) ~[?:?]
    at org.mongodb.morphia.mapping.DefaultCreator.createInstance(DefaultCreator.java:91) ~[?:?]
    at org.mongodb.morphia.mapping.DefaultCreator.createInstance(DefaultCreator.java:105) ~[?:?]
    at org.mongodb.morphia.mapping.EmbeddedMapper.readMapOrCollectionOrEntity(EmbeddedMapper.java:209) ~[?:?]
    at org.mongodb.morphia.mapping.EmbeddedMapper.readCollection(EmbeddedMapper.java:144) ~[?:?]
    at org.mongodb.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:47) ~[?:?]
    at org.mongodb.morphia.mapping.Mapper.readMappedField(Mapper.java:850) ~[?:?]
    at org.mongodb.morphia.mapping.Mapper.fromDb(Mapper.java:282) ~[?:?]
    at org.mongodb.morphia.mapping.Mapper.fromDBObject(Mapper.java:193) ~[?:?]
    at org.mongodb.morphia.query.MorphiaIterator.convertItem(MorphiaIterator.java:134) ~[?:?]
    at org.mongodb.morphia.query.MorphiaIterator.processItem(MorphiaIterator.java:146) ~[?:?]
    at org.mongodb.morphia.query.MorphiaIterator.next(MorphiaIterator.java:117) ~[?:?]
    at org.mongodb.morphia.query.QueryImpl.get(QueryImpl.java:236) ~[?:?]
    at org.mongodb.morphia.query.QueryImpl.get(QueryImpl.java:227) ~[?:?]
    at org.mongodb.morphia.dao.BasicDAO.findOne(BasicDAO.java:178) ~[?:?]
    at eu.unionmc.kitpvp.player.PlayerManager.get(PlayerManager.java:49) ~[?:?]
    at eu.unionmc.kitpvp.commands.kitCommand.onCommand(kitCommand.java:31) ~[?:?]
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot.jar:git-Spigot-550ebac-7019900]

播放器-吗啡实体

代码语言:javascript
复制
@Entity(value = "users", noClassnameStored = true)
public class KPlayer extends User{

private int kills, deaths, level;
private long gold;

private PlayerRank currentRank;

private Set<Kit> ownedKits = new HashSet<>();

@Transient
private float kdr;

public int getKills() {
    return kills;
}

public void setKills(int kills) {
    this.kills = kills;
}

public int getDeaths() {
    return deaths;
}

public void setDeaths(int deaths) {
    this.deaths = deaths;
}

public float getKdr() {
    return kdr;
}

public void setKdr(float kdr) {
    this.kdr = kdr;
}

public PlayerRank getCurrentRank() {
    return currentRank;
}

public void setCurrentRank(PlayerRank currentRank) {
    this.currentRank = currentRank;
}

public int getLevel() {
    return level;
}

public void setLevel(int level) {
    this.level = level;
}

public long getGold() {
    return gold;
}

public void setGold(long gold) {
    this.gold = gold;
}

public Set<Kit> getOwnedKits() {
    return ownedKits;
}

public void setOwnedKits(Set<Kit> ownedKits) {
    this.ownedKits = ownedKits;
}

public void addKit(Kit kit){
    this.ownedKits.add(kit);
}

public boolean ownKit(Kit kit){
    return this.ownedKits.contains(kit);
}
}

Kit类

代码语言:javascript
复制
package eu.unionmc.kitpvp.kit;

import org.bukkit.Material;

public abstract class Kit{

private String name;
private String[] description;

private boolean locked;
private int levelToApply;

private long cost;

private Material icon;

public Kit() {
}

public Kit(String name, boolean locked, int levelToApply, long cost, Material icon, String... description) {
    this.name = name;
    this.description = description;
    this.locked = locked;
    this.levelToApply = levelToApply;
    this.cost = cost;
    this.icon = icon;
}


public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String[] getDescription() {
    return description;
}

public void setDescription(String[] description) {
    this.description = description;
}

public boolean isLocked() {
    return locked;
}

public void setLocked(boolean locked) {
    this.locked = locked;
}

public int getLevelToApply() {
    return levelToApply;
}

public void setLevelToApply(int levelToApply) {
    this.levelToApply = levelToApply;
}

public Material getIcon() {
    return icon;
}

public void setIcon(Material icon) {
    this.icon = icon;
}

public long getCost() {
    return cost;
}

public void setCost(long cost) {
    this.cost = cost;
}

public abstract void apply();

}

PlayerManager类

代码语言:javascript
复制
public class PlayerManager implements CRUD<KPlayer,Player> {

private KitPool pool;

public PlayerManager(KitPool pool) {
    this.pool = pool;
}

public KPlayer create(Player p){
    KPlayer kp = alreadyExists(p.getUniqueId().toString());

    if(kp == null){
        kp = new KPlayer();

        kp.setUUID(p.getUniqueId().toString());
        kp.setUsername(p.getName());
        kp.setEntity(p);

        kp.setLevel(0);
        kp.setCurrentRank(PlayerRank.NONE);
        kp.setKdr(0);
        kp.setKills(0);
        kp.setDeaths(0);
        kp.setGold(0);
        kp.addKit(new PVP());
        update(kp);
    }

    return kp;
}

@Override
public KPlayer get(Player entry) {
    return pool.getPlayerRef().findOne("uuid", entry.getUniqueId().toString());
}

@Override
public void update(KPlayer entry) {
    pool.getPlayerRef().save(entry);
}

@Override
public void delete(KPlayer entry) {
    pool.getPlayerRef().delete(entry);
}

@Override
public KPlayer alreadyExists(String entry) {
    return pool.getPlayerRef().findOne("uuid", entry);
}

}

工具包命令类

代码语言:javascript
复制
public class kitCommand implements CommandExecutor {

KitPvP plugin;

public kitCommand(KitPvP plugin) {
    this.plugin = plugin;
}

@Override
public boolean onCommand(CommandSender sender, Command command, String s, String[] args) {
    if(!(sender instanceof Player)) return true;

    Player p = (Player) sender;
    KPlayer kp = plugin.getPlayerManager().get(p);

    List<String> kitNames = plugin.getKitManager().getKits().stream().map(Kit::getName).collect(Collectors.toList());
    String names = StringUtils.join(kitNames, ", ");

    if(args.length == 0){
        p.sendMessage("§cUsage: /kit <kitName>");
        p.sendMessage("§eKits: §6"+names);
        return  true;
    }

    if(kp == null) return true;

    if(plugin.getKitManager().getKitByName(args[0]) == null){
        p.sendMessage("§cThis kit doens't exists.");
        return true;
    }

    plugin.getKitManager().perform(p, kp, plugin.getKitManager().getKitByName(args[0]));

    return false;
}
}
EN

回答 1

Stack Overflow用户

发布于 2017-08-18 07:48:33

给KPlayer一个默认的没有args构造函数的公共访问权限,这应该可以修复这个异常

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45746381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档