第十三章:常见异常

AssetLoadException

加载资产时,程序一运行就产生了 com.jme3.asset.AssetLoadException: No loader registered for type "xxx" 异常

严重: Uncaught exception thrown in Thread[jME3 Main,5,main]
com.jme3.asset.AssetLoadException: No loader registered for type ""
    at
com.jme3.asset.ImplHandler.aquireLoader(ImplHandler.java:200)
    at 
com.jme3.asset.DesktopAssetManager.loadLocatedAsset(DesktopAssetManager.java:255)

首先,请检查该资产文件是否是 jME3 所支持的格式。比如jME3不支持 .max,直接加载这种模型将产生上述异常。

其次,如果加载的是 jME3 所支持的源数据格式,可能是因为没有添加相关的依赖库。

  • .blend 依赖 jme3-blender-{version}.jar
  • .fbx.mesh.xml.gltf 依赖 jme3-plugins-{version}.jar
  • .ogg 依赖 jme3-jogg-{version}.jar

AssetNotFoundException

若资产文件不存在,或者使用了错误的资产路径,将会产生 AssetNotFoundException 。

com.jme3.asset.AssetNotFoundException: Materials/Monkey/monkey.j3m

若资产文件存在,但资产路径忽略了大小写,同样会产生 AssetNotFoundException,并提示 Asset name doesn't match requirements.

com.jme3.asset.AssetNotFoundException: Asset name doesn't match requirements.
"D:/WORKSPACES/jworkspace/MyGame/bin/Models/Monkey/monkey.j3o" doesn't match "Models/Monkey/Monkey.j3o"

对比路径:

  • Models/Monkey/monkey.j3o
  • Models/Monkey/Monkey.j3o

NullPointerException

游戏在SDK中运行正常,但是发布成单独的可执行文件后(.jar, .jnlp, .exe, .app)在运行就报错了。程序弹框提示 Cannot locate resource: Scenes/town/main.scene,并退出。

com.jme3.asset.DesktopAssetManager loadAsset
WARNING: Cannot locate resource: Scenes/town/main.scene
com.jme3.app.Application handleError
SEVERE: Uncaught exception thrown in Thread[LWJGL Renderer Thread,5,main]
java.lang.NullPointerException

SDK的默认编译脚本在打包可执行文件时,只会复制 j3o 模型文件。用SDK把 .scene、.mesh.xml、.blend 等源数据模型转成 .j3o 即可。

// TODO 更多异常待补充