From 5899c73ab83b3a36d373ab9a17c7b60f116e0516 Mon Sep 17 00:00:00 2001 From: huangyuhui Date: Sat, 5 Mar 2016 21:43:54 +0800 Subject: [PATCH] Should fixed #46 --- .../launcher/core/mod/ModpackManager.java | 5 ++-- .../launcher/ui/MainPagePanel.java | 5 ++-- .../launcher/util/HMCLMinecraftService.java | 26 +++++++++++-------- .../hellominecraft/util/tasks/TaskWindow.java | 8 +++--- 4 files changed, 26 insertions(+), 18 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/mod/ModpackManager.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/mod/ModpackManager.java index b8f75dd7f..4d32fe671 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/mod/ModpackManager.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/mod/ModpackManager.java @@ -31,6 +31,7 @@ import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import java.util.zip.ZipFile; +import javax.swing.JFrame; import javax.swing.JOptionPane; import org.jackhuang.hellominecraft.util.C; import org.jackhuang.hellominecraft.util.logging.HMCLog; @@ -80,7 +81,7 @@ public final class ModpackManager { * @return The installing Task, may take long time, please consider * TaskWindow. */ - public static Task install(final File input, final IMinecraftService service, final String idFUCK) { + public static Task install(JFrame parFrame, final File input, final IMinecraftService service, final String idFUCK) { return new Task() { Collection c = new ArrayList<>(); @@ -110,7 +111,7 @@ public final class ModpackManager { msgs[0] = C.i18n("modpack.task.install"); msgs[1] = new WebPage(description); ((WebPage) msgs[1]).setPreferredSize(new Dimension(800, 350)); - int result = JOptionPane.showOptionDialog(null, msgs, (String) msgs[0], JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null); + int result = JOptionPane.showOptionDialog(parFrame, msgs, (String) msgs[0], JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null); if (result == JOptionPane.NO_OPTION) throw new NoShownTaskException("Operation was canceled by user."); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/MainPagePanel.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/MainPagePanel.java index 4bb2664ac..446803f25 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/MainPagePanel.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/MainPagePanel.java @@ -37,6 +37,7 @@ import org.jackhuang.hellominecraft.launcher.setting.Settings; import org.jackhuang.hellominecraft.launcher.core.mod.ModpackManager; import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftService; import org.jackhuang.hellominecraft.launcher.ui.modpack.ModpackWizard; +import org.jackhuang.hellominecraft.launcher.util.HMCLMinecraftService; import org.jackhuang.hellominecraft.util.ui.GraphicsUtils; import org.jackhuang.hellominecraft.util.Event; import org.jackhuang.hellominecraft.lookandfeel.comp.ConstomButton; @@ -382,7 +383,7 @@ public class MainPagePanel extends AnimatedPanel { if (fc.getSelectedFile() == null) return; String suggestedModpackId = JOptionPane.showInputDialog("Please enter your favourite game name", FileUtils.getBaseName(fc.getSelectedFile().getName())); - TaskWindow.factory().append(ModpackManager.install(fc.getSelectedFile(), Settings.getLastProfile().service(), suggestedModpackId)).create(); + TaskWindow.factory().append(ModpackManager.install(MainFrame.INSTANCE, fc.getSelectedFile(), Settings.getLastProfile().service(), suggestedModpackId)).create(); Settings.getLastProfile().service().version().refreshVersions(); }//GEN-LAST:event_btnImportModpackActionPerformed @@ -489,7 +490,7 @@ public class MainPagePanel extends AnimatedPanel { cboVersions.removeAllItems(); String selVersion = Settings.getLastProfile().getSelectedVersion(); if (Settings.getLastProfile().service().version().getVersions().isEmpty()) { - if (!showedNoVersion) { + if (!showedNoVersion && ((HMCLMinecraftService) Settings.getLastProfile().service()).checkedModpack) { showedNoVersion = true; SwingUtilities.invokeLater(() -> { if (MessageBox.Show(C.i18n("mainwindow.no_version"), MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION) diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/HMCLMinecraftService.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/HMCLMinecraftService.java index 2428b57b7..d500a5436 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/HMCLMinecraftService.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/HMCLMinecraftService.java @@ -21,6 +21,7 @@ import com.google.gson.JsonSyntaxException; import java.io.File; import java.util.HashMap; import java.util.Map; +import javax.swing.SwingUtilities; import org.jackhuang.hellominecraft.launcher.core.GameException; import org.jackhuang.hellominecraft.launcher.core.install.MinecraftInstallerService; import org.jackhuang.hellominecraft.launcher.core.asset.MinecraftAssetService; @@ -39,6 +40,7 @@ import org.jackhuang.hellominecraft.launcher.core.mod.MinecraftModService; import org.jackhuang.hellominecraft.launcher.core.mod.ModpackManager; import org.jackhuang.hellominecraft.launcher.setting.Profile; import org.jackhuang.hellominecraft.launcher.setting.VersionSetting; +import org.jackhuang.hellominecraft.launcher.ui.MainFrame; import org.jackhuang.hellominecraft.util.C; import org.jackhuang.hellominecraft.util.logging.HMCLog; import org.jackhuang.hellominecraft.util.system.FileUtils; @@ -66,18 +68,20 @@ public class HMCLMinecraftService extends IMinecraftService { this.mis = new MinecraftInstallerService(this); } + public boolean checkedModpack = false, checkingModpack = false; + private void checkModpack() { - int show = 0; - for (StackTraceElement e : Thread.currentThread().getStackTrace()) - if ("checkModpack".equals(e.getMethodName())) - ++show; - if (show > 1) - return; - if (version().getVersionCount() == 0) { - File modpack = new File("modpack.zip"); - if (modpack.exists()) - if (TaskWindow.execute(ModpackManager.install(modpack, this, null))) - version().refreshVersions(); + if (!checkingModpack) { + checkingModpack = true; + if (version().getVersionCount() == 0) { + File modpack = new File("modpack.zip"); + if (modpack.exists()) + SwingUtilities.invokeLater(() -> { + if (TaskWindow.execute(ModpackManager.install(MainFrame.INSTANCE, modpack, this, null))) + version().refreshVersions(); + checkedModpack = true; + }); + } } } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/util/tasks/TaskWindow.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/util/tasks/TaskWindow.java index 51ffe3dbc..4309f569d 100755 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/util/tasks/TaskWindow.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/util/tasks/TaskWindow.java @@ -225,9 +225,11 @@ public class TaskWindow extends javax.swing.JDialog @Override public void run() { - SwingUtilities.invokeLater(this::dispose); - suc = true; - HMCLog.log("Tasks are finished."); + SwingUtilities.invokeLater(() -> { + dispose(); + suc = true; + HMCLog.log("Tasks are finished."); + }); } @Override