diff --git a/src/main/java/net/minecraftforge/installer/InstallerPanel.java b/src/main/java/net/minecraftforge/installer/InstallerPanel.java index 26b96af..3453c7a 100644 --- a/src/main/java/net/minecraftforge/installer/InstallerPanel.java +++ b/src/main/java/net/minecraftforge/installer/InstallerPanel.java @@ -4,30 +4,18 @@ */ package net.minecraftforge.installer; -import java.awt.BorderLayout; import java.awt.Color; -import java.awt.Component; import java.awt.Desktop; import java.awt.EventQueue; -import java.awt.Frame; import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; -import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URI; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.function.Function; -import java.util.function.Predicate; import javax.imageio.ImageIO; import javax.swing.AbstractAction; @@ -36,29 +24,20 @@ import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JButton; -import javax.swing.JCheckBox; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JLabel; -import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JRadioButton; -import javax.swing.JScrollPane; import javax.swing.JTextField; -import javax.swing.ListCellRenderer; -import javax.swing.SwingConstants; import javax.swing.border.LineBorder; import net.minecraftforge.installer.actions.Action; import net.minecraftforge.installer.actions.ActionCanceledException; import net.minecraftforge.installer.actions.Actions; import net.minecraftforge.installer.actions.ProgressCallback; -import net.minecraftforge.installer.json.Install; import net.minecraftforge.installer.json.InstallV1; -import net.minecraftforge.installer.json.Mirror; -import net.minecraftforge.installer.json.OptionalLibrary; -import net.minecraftforge.installer.json.Util; @SuppressWarnings("unused") public class InstallerPanel extends JPanel { @@ -280,6 +259,7 @@ public void run(ProgressCallback monitor) { dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); dialog.setVisible(true); int result = (Integer) (optionPane.getValue() != null ? optionPane.getValue() : -1); + if (result == JOptionPane.OK_OPTION) { ProgressFrame prog = new ProgressFrame(monitor, "Installing " + profile.getVersion(), Thread.currentThread()::interrupt); SimpleInstaller.hookStdOut(prog); @@ -304,7 +284,7 @@ public void run(ProgressCallback monitor) { "The following addresse did not have valid certificates: " + badCerts + "
" + "This typically happens with an outdated java install. Try updating your java install from https://adoptium.net/"; } - JOptionPane.showMessageDialog(null, message, "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showOptionDialog(null, message, "Error", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE, null, new Object[]{"Ok", SwingUtil.createLogButton()}, ""); e.printStackTrace(); } finally { prog.dispose(); diff --git a/src/main/java/net/minecraftforge/installer/SwingUtil.java b/src/main/java/net/minecraftforge/installer/SwingUtil.java new file mode 100644 index 0000000..dc6a943 --- /dev/null +++ b/src/main/java/net/minecraftforge/installer/SwingUtil.java @@ -0,0 +1,27 @@ +package net.minecraftforge.installer; + +import javax.swing.*; +import java.awt.*; +import java.io.File; +import java.io.IOException; + +public class SwingUtil { + public static JButton createLogButton() { + JButton button = new JButton("Open log"); + button.addActionListener(ev -> { + File file = new File("installer.log"); + try { + if (file.exists()) + Desktop.getDesktop().open(file); + } catch (IOException e) { + // Handle any errors that may occur during file opening + e.printStackTrace(); + + // Show the error. Does not happen on headless. + // Can only occur on NON-Headless, so its safe to just show the error + JOptionPane.showMessageDialog(null, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); + } + }); + return button; + } +} diff --git a/src/main/java/net/minecraftforge/installer/actions/Action.java b/src/main/java/net/minecraftforge/installer/actions/Action.java index 9ac08fb..7845ca5 100644 --- a/src/main/java/net/minecraftforge/installer/actions/Action.java +++ b/src/main/java/net/minecraftforge/installer/actions/Action.java @@ -18,6 +18,7 @@ import net.minecraftforge.installer.SimpleInstaller; import net.minecraftforge.installer.json.Artifact; import net.minecraftforge.installer.json.InstallV1; +import net.minecraftforge.installer.SwingUtil; import net.minecraftforge.installer.json.Util; import net.minecraftforge.installer.json.Version; import net.minecraftforge.installer.json.Version.Download; @@ -40,7 +41,7 @@ protected Action(InstallV1 profile, ProgressCallback monitor, boolean isClient) protected void error(String message) { if (!SimpleInstaller.headless) - JOptionPane.showMessageDialog(null, message, "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showOptionDialog(null, message, "Error", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE, null, new Object[]{"Ok", SwingUtil.createLogButton()}, ""); monitor.stage(message); } diff --git a/src/main/java/net/minecraftforge/installer/actions/PostProcessors.java b/src/main/java/net/minecraftforge/installer/actions/PostProcessors.java index eb58395..99040a6 100644 --- a/src/main/java/net/minecraftforge/installer/actions/PostProcessors.java +++ b/src/main/java/net/minecraftforge/installer/actions/PostProcessors.java @@ -36,6 +36,7 @@ import net.minecraftforge.installer.json.Artifact; import net.minecraftforge.installer.json.Install.Processor; import net.minecraftforge.installer.json.InstallV1; +import net.minecraftforge.installer.SwingUtil; import net.minecraftforge.installer.json.Version.Library; import net.minecraftforge.installer.json.Util; @@ -281,7 +282,7 @@ private void handleError(Throwable e) { private void error(String message) { if (!SimpleInstaller.headless) - JOptionPane.showMessageDialog(null, message, "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showOptionDialog(null, message, "Error", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE, null, new Object[]{"Ok", SwingUtil.createLogButton()}, ""); for (String line : message.split("\n")) monitor.message(line); } diff --git a/src/main/java/net/minecraftforge/installer/json/Util.java b/src/main/java/net/minecraftforge/installer/json/Util.java index b2e9fa6..348b0a4 100644 --- a/src/main/java/net/minecraftforge/installer/json/Util.java +++ b/src/main/java/net/minecraftforge/installer/json/Util.java @@ -143,4 +143,5 @@ public static String replaceTokens(Map> token return buf.toString(); } + }