From 338192ad17bf9639ec74783e4a4d19f9037a915a Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Wed, 6 Dec 2017 20:30:06 +0800 Subject: [PATCH] fix: captureScreen() return null --- .../autojs/core/image/ScreenCapturer.java | 15 ++++++++++----- .../com/stardust/autojs/runtime/api/Images.java | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/autojs/src/main/java/com/stardust/autojs/core/image/ScreenCapturer.java b/autojs/src/main/java/com/stardust/autojs/core/image/ScreenCapturer.java index 95671c46..9f4bb6c7 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/image/ScreenCapturer.java +++ b/autojs/src/main/java/com/stardust/autojs/core/image/ScreenCapturer.java @@ -34,6 +34,7 @@ public class ScreenCapturer { private volatile Looper mImageAcquireLooper; private volatile Image mUnderUsingImage; private volatile Image mCachedImage; + private volatile boolean mImageAvailable = false; private final int mScreenWidth; private final int mScreenHeight; private final int mScreenDensity; @@ -90,6 +91,7 @@ public class ScreenCapturer { mCachedImage.close(); } mCachedImage = reader.acquireLatestImage(); + mImageAvailable = true; mCachedImageLock.notify(); return; } @@ -100,13 +102,13 @@ public class ScreenCapturer { @Nullable public Image capture() { - if (mUnderUsingImage == null && mCachedImage == null) { + if (!mImageAvailable) { waitForImageAvailable(); } - if (mCachedImage != null) { - if (mUnderUsingImage != null) - mUnderUsingImage.close(); - synchronized (mCachedImageLock) { + synchronized (mCachedImageLock) { + if (mCachedImage != null) { + if (mUnderUsingImage != null) + mUnderUsingImage.close(); mUnderUsingImage = mCachedImage; mCachedImage = null; } @@ -116,6 +118,9 @@ public class ScreenCapturer { private void waitForImageAvailable() { synchronized (mCachedImageLock) { + if (mImageAvailable) { + return; + } try { mCachedImageLock.wait(); } catch (InterruptedException e) { diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Images.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Images.java index c3460819..cf383e2c 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Images.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Images.java @@ -103,7 +103,7 @@ public class Images { throw new SecurityException("No screen capture permission"); } Image capture = mScreenCapturer.capture(); - if (capture == mPreCapture) { + if (capture == mPreCapture && mPreCaptureImage != null) { return mPreCaptureImage; } mPreCapture = capture;