diff --git a/app/src/main/java/io/xpipe/app/core/AppWindowHelper.java b/app/src/main/java/io/xpipe/app/core/AppWindowHelper.java index 10d34853..317150d8 100644 --- a/app/src/main/java/io/xpipe/app/core/AppWindowHelper.java +++ b/app/src/main/java/io/xpipe/app/core/AppWindowHelper.java @@ -142,10 +142,15 @@ public class AppWindowHelper { if (!Platform.isFxApplicationThread()) { CountDownLatch latch = new CountDownLatch(1); Platform.runLater(() -> { - Alert a = supplier.get(); - c.accept(a); - result.set(a.showAndWait()); - latch.countDown(); + try { + Alert a = supplier.get(); + c.accept(a); + result.set(a.showAndWait()); + } catch (Throwable t) { + result.set(Optional.empty()); + } finally { + latch.countDown(); + } }); try { latch.await(); diff --git a/app/src/main/java/io/xpipe/app/issue/ErrorHandlerComp.java b/app/src/main/java/io/xpipe/app/issue/ErrorHandlerComp.java index 8f1fc481..2caabe61 100644 --- a/app/src/main/java/io/xpipe/app/issue/ErrorHandlerComp.java +++ b/app/src/main/java/io/xpipe/app/issue/ErrorHandlerComp.java @@ -106,13 +106,18 @@ public class ErrorHandlerComp extends SimpleComp { Platform.runLater(() -> { if (!showing.get()) { showing.set(true); - var window = AppWindowHelper.sideWindow( - AppI18n.get("errorHandler"), - w -> { - return setUpComp(event, w, finishLatch); - }, - true, - null); + Stage window = null; + try { + window = AppWindowHelper.sideWindow(AppI18n.get("errorHandler"), w -> { + return setUpComp(event, w, finishLatch); + }, true, null); + } catch (Throwable t) { + showLatch.countDown(); + finishLatch.countDown(); + showing.set(false); + t.printStackTrace(); + return; + } // An exception is thrown when show and wait is called // within an animation or layout processing task, so use show try {