0

方法:

    public Auction getAuction(UUID id) {
        System.out.println("count: " + auctions.size());
        if (!doesAuctionExist(id))
            return null;
        UUID owner = UUID.fromString(Main.getAuctionsFile().getConfiguration().getString("auctions."+id.toString()+".owner"));
        Bukkit.getPlayer("NoneTaken").sendMessage("owner "+owner);
        long price = Main.getAuctionsFile().getConfiguration().getLong("auctions." + id.toString() + ".price");
        boolean useTokens = Main.getAuctionsFile().getConfiguration().getBoolean("auctions." + id.toString() + ".useTokens");
        long timeCreated = Main.getAuctionsFile().getConfiguration().getLong("auctions." + id.toString() + ".timeCreated");
        ItemStack item = (ItemStack) Main.getAuctionsFile().getConfiguration().get("auctions." + id.toString() + ".item");
        Bukkit.getPlayer("NoneTaken").sendMessage("null: " + (owner == null));
        return new Auction(
                owner,
                item,
                price,
                useTokens,
                id,
                timeCreated);
    }

构造函数:

    public Auction(UUID owner, ItemStack item, long price, boolean useTokens, UUID identifier, long timeCreated) {
        this.owner = owner;
        this.item = item;
        this.price = price;
        this.useTokens = useTokens;
        this.identifier = identifier;
        this.timeCreated = timeCreated;
        Main.getAuctionManager().registerAuction(this);
    }

错误:

18.10 17:12:12 [Server] ERROR Error occurred while enabling BanditAH v1.0 (Is it up to date?)
18.10 17:12:12 [Server] INFO java.lang.NullPointerException
18.10 17:12:12 [Server] INFO at me.nonetaken.banditah.managers.Auction.<init>(Auction.java:28) ~[?:?]
18.10 17:12:12 [Server] INFO at me.nonetaken.banditah.managers.AuctionManager.getAuction(AuctionManager.java:86) ~[?:?]
18.10 17:12:12 [Server] INFO at me.nonetaken.banditah.managers.AuctionManager.<init>(AuctionManager.java:28) ~[?:?]

AuctionManager.java 中的第 86owner,行是第一个代码块的构造函数中的行。发送“null: true/false”的消息总是返回 false,因此对象不能为 null,但在该行的错误中会抛出 NPE。

任何帮助表示赞赏:)

4

2 回答 2

0

发现问题了。。

原来构造函数调用registerAuction()是问题所在。然后调用saveAuction()哪个覆盖了拍卖试图读取的同一位置的文件。谢谢Ajinkyad。

于 2019-10-18T21:41:10.010 回答
0

请检查此行

Main.getAuctionManager().registerAuction(this);

Main.getAuctionManager() 是静态方法吗?如果不是,则来自 getAuctionManager() 的 Main 或返回值可能为 null

如果是,则 getAuctionManager() 的返回值可能为 null

请分享 registerAuction(),这可能会引发 NPE

于 2019-10-18T21:30:51.710 回答