当对象为';t空[JAVA]

当对象为';t空[JAVA],java,nullpointerexception,Java,Nullpointerexception,方法: 建造商: public Auction getAuction(UUID id) { System.out.println("count: " + auctions.size()); if (!doesAuctionExist(id)) return null; UUID owner = UUID.fromString(Main.getAuctionsFile().getConfiguration().getS

方法:

建造商:

    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[服务器]启用Bantidah v1.0时出错(是否为最新版本?)
18.10 17:12:12[服务器]信息java.lang.NullPointerException
18.10 17:12:12[服务器]我的信息。无拍摄。banditah.managers.Auction。(Auction.java:28)~[?:?]
18.10 17:12:12[服务器]在我处的信息.noneaked.banditah.managers.AuctionManager.getAuction(AuctionManager.java:86)~[?:?]
18.10 17:12:12[服务器]在我处的信息.noneaked.banditah.managers.AuctionManager.(AuctionManager.java:28)~[?:?]
AuctionManager.java中的第86行是第一个代码块中构造函数中的
所有者。
发送“null:true/false”的消息总是返回false,因此对象不能为null,但在该行的错误中抛出了NPE


感谢您的帮助:)

请检查这行

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) ~[?:?]
getAuctionManager()是静态方法吗?如果不是,则getAuctionManager()的主值或返回值可能为null

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

请共享RegisterAction(),它可能会抛出一个NPE发现问题


事实证明,调用
RegisterAction()
的构造函数是问题所在。然后,它调用了
saveAuction()
,这将覆盖拍卖试图读取的同一位置的文件。感谢您的支持。

Auction.java中的第28行是什么?您的
Auction
构造函数的最后一行是一种代码味道,因为您让
这个
逃逸-请参阅以获取解释。解决这个问题可能会解决你的问题。我认为发布的代码不可能生成错误。您正在执行的代码是否可能不是您发布的源代码?请尝试完全重建代码。如果没有行号,则无法真正跟踪堆栈跟踪。您没有发布整个文件,因此我们甚至无法计数。Main.getAictionManager()返回null;这是唯一的选项。您有一个递归依赖项,即
AuctionManager
构造函数调用
Auction
构造函数,后者反过来调用
Main.getAuctionManager()
,但由于
AuctionManager
构造函数尚未返回,因此没有向
Main
注册的管理器,因此
getAuctionManager()
返回null。修复依赖项。如果
RegisterAction()
抛出NPE,那么它将位于堆栈跟踪中。既然不是这样,那就不可能了。
Main.getAuctionManager().registerAuction(this);