用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 。相关推荐

  1. Spring Cloud RestTemplate报错:java.lang.IllegalStateException: No instances available for xxx

    java.lang.IllegalStateException: No instances available for XXXX 一.问题复现 最近搭建springCloud项目,搭建Eureka,多 ...

  2. springboot配置log4j2报错:java.lang.IllegalStateException: Logback configuration error detected:

    引入log4j2后启动报错. Exception in thread "main" java.lang.IllegalStateException: java.lang.Illeg ...

  3. JUnit测试类报错:java.lang.IllegalStateException: Failed to load ApplicationContext

    问题描述 运行JUnit测试类时,报以下错误信息: java.lang.IllegalStateException: Failed to load ApplicationContextat org.s ...

  4. 报错:java.lang.IllegalStateException: getOutputStream() has already been called for this response

    文章目录 问题背景 分析 解决方案 错误信息详情: 严重: Servlet.service() for servlet [jsp] in context with path [/exportExcel ...

  5. IDEA 启动报错:java.lang.IllegalStateException: failed to create a child event loop 问题解决

    遇到的问题 昨天电脑自动更新了,今天死活启动不了项目,看到idea的提示是: idea日志如下 根据提示说 查看idea的启动日志: 2018-11-20 17:35:42,010 [ 46737] ...

  6. java提示单个cass怎么办,求助解决hibernate报错,java.lang.casscastexception

    确定一下session.beginTransaction();返回的 Transaction对象是不是javax.transaction.Transaction的实例. 我记不清了,这里也没hiber ...

  7. SpringBoot项目启动报错,java.lang.IllegalStateException: Ambiguous mapping.访问路径模棱两可,无法映射的问题!!!

    问题描述: SpringBoot项目刚启动就报错 下面是报错信息: 我这里提取了一下关键信息 Ambiguous mapping.(模棱两可的mapping) Cannot map 'test' me ...

  8. springcloud项目报错:java.lang.IllegalStateException: No instances available for XXX(服务提供者的实例名)

    在学习springcloud的过程中,通过ribbon实现服务消费者时,调用服务提供方的接口时报错: 服务提供方和服务消费方应用的application.yml配置的fetch-registry均为t ...

  9. jenkins报错:java.lang.illegalstateexception already existed will not overwrite with

    .jenkins/jobs/jobname/nextBuildNumber 记录了下一次构建的批次数,在 job 维度下的自增 id 修改nextBuildNumber后需要重载配置文件,点击系统管理 ...

最新文章

  1. Elk5安装X-Pack
  2. 『SHELL』--SHELL脚本执行方式(转)
  3. 使用Denyhost来阻止恶意连接SSH的IP
  4. [转]java二维码生成与解析代码实现
  5. 在wsl下运行c语言,在Windows10通过WSL架设linux/gcc c语言学习环境
  6. redirect与forward跳转的区别
  7. java 线程不安全例子_Java中多线程安全问题实例分析
  8. nginx+tomcat+msm实现seesion共享
  9. 高度自定义的TabBarController 两个TableView之间的联动
  10. js 数组转带空格字符串
  11. Hadoop - 任务调度系统比较
  12. 阶段3 2.Spring_03.Spring的 IOC 和 DI_10 构造函数注入
  13. html multiply属性,multiply
  14. html 模拟鼠标移动,如何在网页端用js模拟鼠标移动点击等操作
  15. PS怎么压缩图片大小而像素不变
  16. 培训班出身的程序员,未来何去何从?
  17. 处女座和小姐姐(模拟)
  18. 一台机器(群晖、CentOS)挂两台网心云docker
  19. 微信运动服务器忙,微信运动步数每天不足百步,你们宅着忙什么呢?
  20. C#:实现麦克劳林级数计算非线性函数算法(附完整源码)

热门文章

  1. ME57与ME58的区别
  2. 在CentOS 7上搭建代理服务器(Socks 5)
  3. android学生信息管理系统PPT讲解,基于Android的学生信息管理及沟通系统的设计与实现毕业论文+选题表+开题报告+设计源码+答辩PPT...
  4. vue点击图片实现大图预览
  5. JS-千分位格式化数据
  6. 飞机大战html js,html、JS 飞机大战游戏
  7. RSTP与其他交换环路解决方案
  8. 部署nagios 受控服务器
  9. 分布式智能微电网的建设方案与应用场景
  10. Istio 对虚拟机支持史话