如何取出autojs的自定义异常的异常信息?
autojs的异常捕获同java的捕获,不过在catch中不需要添加异常的类型,就像在定义变量时不用指定他的类型一样,js是弱类型的语言。
try{
click(0,0);
}catch(e){
log(e);
}
因为我调用了无障碍的功能,再没有开启无障碍或无障碍异常时会抛出autojs自定义的一个异常,会进入他的catch中。异常信息正常打印
[JavaException: com.stardust.autojs.runtime.exception.ScriptException: 无障碍服务未启动]
问题来了,如何把这个excetpion的异常信息打出来呢?
很显然,exception都会实现Throwable接口(或继承这个类的子类并重写方法),那肯定会有getMessage()咯?用用试试看
try{
click(0,0);
}catch(e){
log(e);
log(e.getMessage());
}
控制台输出如下
TypeError: 在对象JavaException: com.stardust.autojs.runtime.exception.ScriptException: 无障碍服务未启动中找不到函数getMessage.
这就很奇怪咯,也就是说他这个自定义的异常不属于Throwable。那就反射一下看看他内部的方法
用class().getMethods()即可获取他内部所有的public方法
try{
click(0,0);
}catch(e){
log(e);
log(e.getClass().getMethods());
}
TypeError: 在对象JavaException: com.stardust.autojs.runtime.exception.ScriptException: 无障碍服务未启动中找不到函数getClass.
这就奇怪咯,反射都反射不来。看一下这个异常倒底是个啥么玩意
try{
click(0,0);
}catch(e){
log(e);
console.log("JavaException",e instanceof JavaException);
console.log("com.stardust.autojs.runtime.exception.ScriptException",e instanceof com.stardust.autojs.runtime.exception.ScriptException);
}
控制台输出
JavaException true
com.stardust.autojs.runtime.exception.ScriptException false
太神奇了,我只想知道JavaException是啥东东。jdk上没有这个类,估计是autojs自己写的。
我想了个办法,可以用冒号分割,最后一个冒号后面的都是错误信息提示,上代码
/**
* 获取autojs自定义异常的错误提示信息
* @param {JavaException} e autojs自定义异常(try/catch中捕获的异常)
* @returns
*/
function getMessageFromJavaException(e){
//将异常转成字符串 js是弱类型 直接赋值即可
e = e.toString();
//从最后一个冒号开始截取 到 末尾
return e.substring(e.lastIndexOf(":") + 1);
}
完美
因为我没想到别的啥异常,也不好造,自己抛出一个异常,并测试
try{
throw new java.lang.RuntimeException("这是exception")
}catch(e){
log(getMessageFromJavaException(e));
}
/**
* 获取autojs自定义异常的错误提示信息
* @param {JavaException} e autojs自定义异常(try/catch中捕获的异常)
* @returns
*/
function getMessageFromJavaException(e){
//将异常转成字符串 js是弱类型 直接赋值即可
e = e.toString();
//从最后一个冒号开始截取 到 末尾
return e.substring(e.lastIndexOf(":") + 1);
}
控制台
这是exception
大功告成,虽然歪门邪道,但是效果有了,哈哈