当对象为';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);