diff --git a/launcher/src/main/java/com/skcraft/launcher/dialog/FeatureSelectionDialog.java b/launcher/src/main/java/com/skcraft/launcher/dialog/FeatureSelectionDialog.java index 1c5301c..08d40a4 100644 --- a/launcher/src/main/java/com/skcraft/launcher/dialog/FeatureSelectionDialog.java +++ b/launcher/src/main/java/com/skcraft/launcher/dialog/FeatureSelectionDialog.java @@ -15,6 +15,8 @@ import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.util.List; import static javax.swing.BorderFactory.createEmptyBorder; @@ -30,11 +32,13 @@ private final JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, componentsScroll, descScroll); private final LinedBoxPanel buttonsPanel = new LinedBoxPanel(true); private final JButton installButton = new JButton(SharedLocale.tr("features.install")); + private final Object receiver; - public FeatureSelectionDialog(Window owner, @NonNull List features) { + public FeatureSelectionDialog(Window owner, @NonNull List features, Object receiver) { super(owner, ModalityType.DOCUMENT_MODAL); this.features = features; + this.receiver = receiver; setTitle(SharedLocale.tr("features.title")); initComponents(); @@ -81,7 +85,15 @@ } }); - installButton.addActionListener(ActionListeners.dispose(this)); + installButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + synchronized (receiver) { + receiver.notifyAll(); + } + FeatureSelectionDialog.this.dispose(); + } + }); } private void updateDescription() { diff --git a/launcher/src/main/java/com/skcraft/launcher/update/BaseUpdater.java b/launcher/src/main/java/com/skcraft/launcher/update/BaseUpdater.java index 81a939b..9aaa6db 100644 --- a/launcher/src/main/java/com/skcraft/launcher/update/BaseUpdater.java +++ b/launcher/src/main/java/com/skcraft/launcher/update/BaseUpdater.java @@ -110,13 +110,18 @@ Collections.sort(features); - SwingUtilities.invokeAndWait(new Runnable() { + SwingUtilities.invokeLater(new Runnable() { @Override public void run() { - new FeatureSelectionDialog(ProgressDialog.getLastDialog(), features).setVisible(true); + new FeatureSelectionDialog(ProgressDialog.getLastDialog(), features, BaseUpdater.this) + .setVisible(true); } }); + synchronized (this) { + this.wait(); + } + for (Feature feature : features) { featuresCache.getSelected().put(Strings.nullToEmpty(feature.getName()), feature.isSelected()); }