diff --git a/src/main/java/com/sparrowwallet/sparrow/control/QRScanDialog.java b/src/main/java/com/sparrowwallet/sparrow/control/QRScanDialog.java index 921a1e12..608468c7 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/QRScanDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/QRScanDialog.java @@ -31,7 +31,6 @@ import com.sparrowwallet.sparrow.io.Config; import com.sparrowwallet.sparrow.io.bbqr.BBQRDecoder; import com.sparrowwallet.sparrow.io.bbqr.BBQRException; import com.sparrowwallet.sparrow.wallet.KeystoreController; -import io.reactivex.Observable; import javafx.application.Platform; import javafx.beans.property.DoubleProperty; import javafx.beans.property.ObjectProperty; @@ -58,7 +57,6 @@ import java.nio.charset.CharsetDecoder; import java.nio.charset.StandardCharsets; import java.util.*; import java.util.List; -import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -203,8 +201,7 @@ public class QRScanDialog extends Dialog { Platform.runLater(() -> { webcamResolutionProperty.set(null); - Observable.just(this).delay(500, TimeUnit.MILLISECONDS) - .subscribe(_ -> webcamService.close(), throwable -> log.error("Error closing webcam", throwable)); + webcamService.close(); }); }); diff --git a/src/main/java/com/sparrowwallet/sparrow/control/WebcamService.java b/src/main/java/com/sparrowwallet/sparrow/control/WebcamService.java index d5aae62e..ab3f4b68 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/WebcamService.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/WebcamService.java @@ -39,6 +39,7 @@ public class WebcamService extends ScheduledService { private final Semaphore taskSemaphore = new Semaphore(1); private final AtomicBoolean cancelRequested = new AtomicBoolean(false); + private final AtomicBoolean captureClosed = new AtomicBoolean(false); private List devices; private List availableDevices; @@ -112,7 +113,7 @@ public class WebcamService extends ScheduledService { return new Task<>() { @Override protected Image call() throws Exception { - if(cancelRequested.get() || isCancelled()) { + if(cancelRequested.get() || isCancelled() || captureClosed.get()) { return null; } @@ -264,8 +265,11 @@ public class WebcamService extends ScheduledService { return cancelled; } - public void close() { - capture.close(); + public synchronized void close() { + if(!captureClosed.get()) { + captureClosed.set(true); + capture.close(); + } } public PropertyLimits getZoomLimits() {