第十三章:常见异常
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 更多异常待补充