解决autojs报错:Wrapped java.lang.IllegalStateException: image has been recycled 。
用autojs写了一个截图,判读色块位置并点击的代码,运行出错。报错如下:
0:37:17.386/E: Wrapped java.lang.IllegalStateException: image has been recycled(file:///android_asset/modules/__images__.js#366)
Wrapped java.lang.IllegalStateException: image has been recycled
at file:///android_asset/modules/__images__.js:366:0
第一次:在运行错误代码前加 img=capturescreen(),依旧报错。
第二次:发现出现问题的地方,和前面截图的语句中间都有函数内部调用过过capturescreen()。在函数后加img=capturescreen(),问题暂时解决。
第三次:遇到调用capturescreen()时,图片内容不断变化。需要使用前面的截图。再次分析截图被回收的原因,发现调用函数将截图结果赋值给了函数内部变量img, 将截图传给全局变量img,问题解决。
总结如下:
capturescreen()截图变量的生存周期为此次截图到下一次截图发生。由于生存周期的原因,应该使用全局变量,不使用局部变量。
需要的图片变量如果需要保存,可以images.copy())一份。
function ifClick(color, x1, x2, y, pyl) {var left;while (true) {img = captureScreen();left = images.findColorEquals(img, color_yd, 0,y-10 , w, h_);;toastLog("当前坐标"+left);if ((left.x<(gd_dw[0]-80))){if (方向([left.x,left.y])=="向右"){// img1 = captureScreen();if ((images.detectsColor(img, color, x1, y) && images.detectsColor(img, color, x1 + pyl, y) && images.detectsColor(img, color, x2 - pyl, y) && (!images.detectsColor(img, color, x2, y)))) {toastLog("点击");click(990, 1250);return true;}}}if ((left.x>(gd_dw[1]+80))){if (方向([left.x,left.y])=="向左"){// img1 = captureScreen();if ((!images.detectsColor(img, color, x1, y)) && images.detectsColor(img, color, x1 + pyl, y) && images.detectsColor(img1, color, x2 - pyl, y) && (images.detectsColor(img, color, x2, y))) {toastLog("点击");click(990, 1250);return true;}}}function 方向(x0) {var img;//引发错误的地方img = captureScreen();rePoint = images.findColorEquals(img, color_yd, 0,gd_dw[2]-10 , w, h_);if (rePoint != null) {if (rePoint.x > x0[0]) { return "向右"; } else { return "向左"; }}else{return "坐标值出错啦";}
}
截图对象在下一次截图发生时自动被销毁,不需要回收。并不会因为将截图赋值给另一个图片对象而可以继续存在。
比如这段代码:
var img,img1;images.requestScreenCapture();
img=images.captureScreen();
images.save(img,"/sdcard/img.png","png");
var img2=images.copy(img);
toastLog("img"+typeof(img));
app.viewFile("/sdcard/img.png");
img1=images.captureScreen();
toastLog("img"+typeof(img));
images.save(img2,"/sdcard/img2.png","png");//复制后对象不会自动销毁
img2.recycle();//不再使用需要手动回收
images.save(img,"/sdcard/img.png","png");//此行报错,img已经被自动销毁报错:
01:57:07.545/E: Wrapped java.lang.IllegalStateException: image has been recycled ([remote]12312312.js#12)
Wrapped java.lang.IllegalStateException: image has been recycledat [remote]12312312.js:12:0
//在赋值给img1以后,img已经自动销毁,这时存储就会报错。
//所以要继续使用img,必须先一步存储,或者复制。
解决autojs报错:Wrapped java.lang.IllegalStateException: image has been recycled 。相关推荐
- Spring Cloud RestTemplate报错:java.lang.IllegalStateException: No instances available for xxx
java.lang.IllegalStateException: No instances available for XXXX 一.问题复现 最近搭建springCloud项目,搭建Eureka,多 ...
- springboot配置log4j2报错:java.lang.IllegalStateException: Logback configuration error detected:
引入log4j2后启动报错. Exception in thread "main" java.lang.IllegalStateException: java.lang.Illeg ...
- JUnit测试类报错:java.lang.IllegalStateException: Failed to load ApplicationContext
问题描述 运行JUnit测试类时,报以下错误信息: java.lang.IllegalStateException: Failed to load ApplicationContextat org.s ...
- 报错:java.lang.IllegalStateException: getOutputStream() has already been called for this response
文章目录 问题背景 分析 解决方案 错误信息详情: 严重: Servlet.service() for servlet [jsp] in context with path [/exportExcel ...
- IDEA 启动报错:java.lang.IllegalStateException: failed to create a child event loop 问题解决
遇到的问题 昨天电脑自动更新了,今天死活启动不了项目,看到idea的提示是: idea日志如下 根据提示说 查看idea的启动日志: 2018-11-20 17:35:42,010 [ 46737] ...
- java提示单个cass怎么办,求助解决hibernate报错,java.lang.casscastexception
确定一下session.beginTransaction();返回的 Transaction对象是不是javax.transaction.Transaction的实例. 我记不清了,这里也没hiber ...
- SpringBoot项目启动报错,java.lang.IllegalStateException: Ambiguous mapping.访问路径模棱两可,无法映射的问题!!!
问题描述: SpringBoot项目刚启动就报错 下面是报错信息: 我这里提取了一下关键信息 Ambiguous mapping.(模棱两可的mapping) Cannot map 'test' me ...
- springcloud项目报错:java.lang.IllegalStateException: No instances available for XXX(服务提供者的实例名)
在学习springcloud的过程中,通过ribbon实现服务消费者时,调用服务提供方的接口时报错: 服务提供方和服务消费方应用的application.yml配置的fetch-registry均为t ...
- jenkins报错:java.lang.illegalstateexception already existed will not overwrite with
.jenkins/jobs/jobname/nextBuildNumber 记录了下一次构建的批次数,在 job 维度下的自增 id 修改nextBuildNumber后需要重载配置文件,点击系统管理 ...
最新文章
- Elk5安装X-Pack
- 『SHELL』--SHELL脚本执行方式(转)
- 使用Denyhost来阻止恶意连接SSH的IP
- [转]java二维码生成与解析代码实现
- 在wsl下运行c语言,在Windows10通过WSL架设linux/gcc c语言学习环境
- redirect与forward跳转的区别
- java 线程不安全例子_Java中多线程安全问题实例分析
- nginx+tomcat+msm实现seesion共享
- 高度自定义的TabBarController 两个TableView之间的联动
- js 数组转带空格字符串
- Hadoop - 任务调度系统比较
- 阶段3 2.Spring_03.Spring的 IOC 和 DI_10 构造函数注入
- html multiply属性,multiply
- html 模拟鼠标移动,如何在网页端用js模拟鼠标移动点击等操作
- PS怎么压缩图片大小而像素不变
- 培训班出身的程序员,未来何去何从?
- 处女座和小姐姐(模拟)
- 一台机器(群晖、CentOS)挂两台网心云docker
- 微信运动服务器忙,微信运动步数每天不足百步,你们宅着忙什么呢?
- C#:实现麦克劳林级数计算非线性函数算法(附完整源码)