是什么导致 java.lang.Error 被抛出而没有任何细节?
What causes a java.lang.Error to be thrown with no details?
我偶尔会遇到 java.lang.Error
(只是 Error
,不是它的子类之一)被抛出,没有明显的来源,也没有详细信息。 Example:
java.lang.Error
at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:211)
at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:190)
(rest of stack trace omitted)
FMLLog.log(modId, Level.TRACE, "Sending event %s to mod %s", stateEvent.getEventType(), modId);
另一个example:
java.lang.Error
at java.util.ArrayList.indexOf(ArrayList.java:317)
at java.util.ArrayList.contains(ArrayList.java:300)
(rest of stack trace omitted)
if (o.equals(elementData[i]))
(链接到完整的堆栈跟踪和来源。)我能想到的所有情况都会导致 Error
实际上会导致它的更具体的子类,and/or 一条包含详细信息的消息.是什么导致在这些地方只抛出一个 Error
?
这是我自己想出来的。 Minecraft 有一个服务器看门狗线程(net/minecraft/server/dedicated/ServerHangWatchdog.java
在 MCP 源代码中),它监视主服务器线程并在 运行 一个 tick 花费太长时间时导致这种情况发生。看起来它在这个堆栈跟踪中抛出错误的代码实际上与它完全无关。
我偶尔会遇到 java.lang.Error
(只是 Error
,不是它的子类之一)被抛出,没有明显的来源,也没有详细信息。 Example:
java.lang.Error
at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:211)
at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:190)
(rest of stack trace omitted)
FMLLog.log(modId, Level.TRACE, "Sending event %s to mod %s", stateEvent.getEventType(), modId);
另一个example:
java.lang.Error
at java.util.ArrayList.indexOf(ArrayList.java:317)
at java.util.ArrayList.contains(ArrayList.java:300)
(rest of stack trace omitted)
if (o.equals(elementData[i]))
(链接到完整的堆栈跟踪和来源。)我能想到的所有情况都会导致 Error
实际上会导致它的更具体的子类,and/or 一条包含详细信息的消息.是什么导致在这些地方只抛出一个 Error
?
这是我自己想出来的。 Minecraft 有一个服务器看门狗线程(net/minecraft/server/dedicated/ServerHangWatchdog.java
在 MCP 源代码中),它监视主服务器线程并在 运行 一个 tick 花费太长时间时导致这种情况发生。看起来它在这个堆栈跟踪中抛出错误的代码实际上与它完全无关。