我偶尔遇到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
实际上导致它的更具体的子类,和/或带有详细信息的消息。什么可能导致只在这些地方投掷Error
?
答案 0 :(得分:0)
我自己想出来了。 Minecraft有一个服务器监视程序线程(MCP源代码中为net/minecraft/server/dedicated/ServerHangWatchdog.java
),监视主服务器线程,如果运行单个tick会花费太长时间,则会导致这种情况发生。看起来像是在这个堆栈跟踪中抛出Error的代码实际上与它完全无关。