autojs 捕获异常并处理

如何取出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 

大功告成,虽然歪门邪道,但是效果有了,哈哈

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值