我有一个非常烦人的问题,当在 Eclipse 中从源代码中导出 jar 文件时,我不会在堆栈跟踪中获得有关发生错误的源代码和行号的信息。我已经检查了 ecplise 中项目的编译器设置,并且设置了类文件生成部分中的所有选项。
我正在为 Minecraft 开发插件,这些插件由服务器软件 bukkit 执行。我的源代码位于 de.celestialcraft.agentestate 包中。发生异常时我得到这样的堆栈跟踪:
23:43:57 [INFO] com.sk89q.worldedit.CuboidClipboard@fb44f99
23:43:57 [SEVERE] Could not pass event BlockDamageEvent to AgentEstate v2.1alpha
org.bukkit.event.EventException
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
va:363)
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
a:62)
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
ava:477)
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
ava:462)
at de.celestialcraft.AgentEstate.AgentEstateBlockListener.onBlockBreak(U
nknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
va:361)
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
a:62)
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
ava:477)
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
ava:462)
at ir.b(ItemInWorldManager.java:393)
at ir.a(ItemInWorldManager.java:200)
at iv.a(NetServerHandler.java:782)
at ei.a(Packet14BlockDig.java:67)
at cg.b(TcpConnection.java:467)
at iv.d(NetServerHandler.java:220)
at iw.b(NetworkListenThread.java:57)
at ht.b(DedicatedServerListenThread.java:34)
at net.minecraft.server.MinecraftServer.r(MinecraftServer.java:981)
at ho.r(DedicatedServer.java:309)
at net.minecraft.server.MinecraftServer.q(MinecraftServer.java:857)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:744)
at fy.run(ThreadMinecraftServer.java:16)
Caused by: java.lang.NullPointerException
at com.sk89q.worldedit.schematic.MCEditSchematicFormat.save(Unknown Sour
ce)
at de.celestialcraft.AgentEstate.Estate.saveState(Unknown Source)
at de.celestialcraft.AgentEstate.Estate.create(Unknown Source)
at de.celestialcraft.AgentEstate.Estate.create(Unknown Source)
at de.celestialcraft.AgentEstate.AgentEstateBlockListener.onBlockDamage(
Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
va:361)
... 25 more
我已将构建路径设置中的jdk路径设置为项目的lib。我希望你能帮助我解决这个问题。
谢谢。
由于 Bukkit 是一个 API,因此当您编写 bukkit 插件时,您正在以只有 Bukkit 知道如何处理所述代码的方式创建代码块。为了找出导致您在此处发布的错误的原因,您需要查看 StackTrace 中“at”行的顶行,并在 Github 上的 Bukkit 源文件中找到它。例如,在此堆栈跟踪中,顶部有以下内容:
org.bukkit.event.EventException
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:363)
您可以看到第 363 行处的 JavaPluginLoader 中的错误导致了 Bukkit EventException。为了准确了解那里发生了什么,您应该访问https://github.com/Bukkit/Bukkit/releases https://github.com/Bukkit/Bukkit/releases并下载适合您正在编码的 MC 版本的源版本。在此 zip 文件中,您将在 src/main/java/ 找到源文件夹,并遵循此堆栈跟踪 (org/bukkit/plugin/java/JavaPluginLoader) 第 2 行中的路径,在该文件的第 363 行中,您将看到发生了错误。
由于我不知道您正在为哪个版本的 Bukkit 编码,因此我无法帮助您解决此问题,只能说该文件中包含第 363 行的任何方法都是与您的问题相关的方法。如果您弄清楚该方法的作用,那就是 Bukkit 试图对您的插件代码执行的操作,但失败了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)