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();
}
+
}