From 7e820ba2a5ad1772d82d433266f85ddd37d78166 Mon Sep 17 00:00:00 2001 From: yushijinhun Date: Mon, 13 Aug 2018 22:18:18 +0800 Subject: [PATCH] Fix closeDialog() throws NPE --- .../java/org/jackhuang/hmcl/ui/Controllers.java | 10 ---------- .../main/java/org/jackhuang/hmcl/ui/Decorator.java | 14 ++++++++------ 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java index 73feac4c0..272921f0f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java @@ -27,7 +27,6 @@ import org.jackhuang.hmcl.Metadata; import org.jackhuang.hmcl.setting.Settings; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.task.TaskExecutor; -import org.jackhuang.hmcl.ui.construct.DialogCloseEvent; import org.jackhuang.hmcl.ui.construct.InputDialogPane; import org.jackhuang.hmcl.ui.construct.MessageBox; import org.jackhuang.hmcl.ui.construct.MessageDialogPane; @@ -163,15 +162,6 @@ public final class Controllers { return pane; } - /** - * Use {@link DialogCloseEvent} - */ - public static void closeDialog(Region content) { - if (stage == null) // shut down - return; - decorator.closeDialog(content); - } - public static void navigate(Node node) { if (decorator.getNowPage() == node) decorator.showPage(null); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java index da9168a8f..ddb959e32 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java @@ -615,18 +615,20 @@ public final class Decorator extends StackPane implements TaskExecutorDialogWiza } @SuppressWarnings("unchecked") - public void closeDialog(Node node) { + private void closeDialog(Node node) { FXUtils.checkFxUserThread(); Optional.ofNullable(node.getProperties().get(PROPERTY_DIALOG_CLOSE_HANDLER)) .ifPresent(handler -> node.removeEventHandler(DialogCloseEvent.CLOSE, (EventHandler) handler)); - dialogPane.pop(node); + if (dialog != null) { + dialogPane.pop(node); - if (dialogPane.getChildren().isEmpty()) { - dialog.close(); - dialog = null; - dialogPane = null; + if (dialogPane.getChildren().isEmpty()) { + dialog.close(); + dialog = null; + dialogPane = null; + } } }