什么原因导致java.lang.Error被抛出而没有细节?

时间:2018-01-29 21:25:30

标签: java exception runtime-error throwable

我偶尔遇到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)

这是LoadController.java:211

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)

这是ArrayList.java:317

if (o.equals(elementData[i]))

(链接转到完整的堆栈跟踪和源。)我能想到的所有情况导致Error实际上导致它的更具体的子类,和/或带有详细信息的消息。什么可能导致只在这些地方投掷Error

1 个答案:

答案 0 :(得分:0)

我自己想出来了。 Minecraft有一个服务器监视程序线程(MCP源代码中为net/minecraft/server/dedicated/ServerHangWatchdog.java),监视主服务器线程,如果运行单个tick会花费太长时间,则会导致这种情况发生。看起来像是在这个堆栈跟踪中抛出Error的代码实际上与它完全无关。