Skip to content

Commit d260e1c

Browse files
Add "Open Log" Button to when an error popup occurs (#75)
1 parent 3edfaec commit d260e1c

File tree

5 files changed

+34
-24
lines changed

5 files changed

+34
-24
lines changed

src/main/java/net/minecraftforge/installer/InstallerPanel.java

+2-22
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,18 @@
44
*/
55
package net.minecraftforge.installer;
66

7-
import java.awt.BorderLayout;
87
import java.awt.Color;
9-
import java.awt.Component;
108
import java.awt.Desktop;
119
import java.awt.EventQueue;
12-
import java.awt.Frame;
1310
import java.awt.event.ActionEvent;
14-
import java.awt.event.ActionListener;
15-
import java.awt.event.MouseAdapter;
16-
import java.awt.event.MouseEvent;
17-
import java.awt.event.MouseMotionListener;
1811
import java.awt.image.BufferedImage;
19-
import java.io.ByteArrayInputStream;
2012
import java.io.File;
2113
import java.io.IOException;
2214
import java.io.InputStream;
2315
import java.net.URI;
24-
import java.util.ArrayList;
2516
import java.util.HashMap;
26-
import java.util.List;
2717
import java.util.Map;
28-
import java.util.Optional;
2918
import java.util.function.Function;
30-
import java.util.function.Predicate;
3119

3220
import javax.imageio.ImageIO;
3321
import javax.swing.AbstractAction;
@@ -36,29 +24,20 @@
3624
import javax.swing.ButtonGroup;
3725
import javax.swing.ImageIcon;
3826
import javax.swing.JButton;
39-
import javax.swing.JCheckBox;
4027
import javax.swing.JDialog;
4128
import javax.swing.JFileChooser;
4229
import javax.swing.JLabel;
43-
import javax.swing.JList;
4430
import javax.swing.JOptionPane;
4531
import javax.swing.JPanel;
4632
import javax.swing.JRadioButton;
47-
import javax.swing.JScrollPane;
4833
import javax.swing.JTextField;
49-
import javax.swing.ListCellRenderer;
50-
import javax.swing.SwingConstants;
5134
import javax.swing.border.LineBorder;
5235

5336
import net.minecraftforge.installer.actions.Action;
5437
import net.minecraftforge.installer.actions.ActionCanceledException;
5538
import net.minecraftforge.installer.actions.Actions;
5639
import net.minecraftforge.installer.actions.ProgressCallback;
57-
import net.minecraftforge.installer.json.Install;
5840
import net.minecraftforge.installer.json.InstallV1;
59-
import net.minecraftforge.installer.json.Mirror;
60-
import net.minecraftforge.installer.json.OptionalLibrary;
61-
import net.minecraftforge.installer.json.Util;
6241

6342
@SuppressWarnings("unused")
6443
public class InstallerPanel extends JPanel {
@@ -280,6 +259,7 @@ public void run(ProgressCallback monitor) {
280259
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
281260
dialog.setVisible(true);
282261
int result = (Integer) (optionPane.getValue() != null ? optionPane.getValue() : -1);
262+
283263
if (result == JOptionPane.OK_OPTION) {
284264
ProgressFrame prog = new ProgressFrame(monitor, "Installing " + profile.getVersion(), Thread.currentThread()::interrupt);
285265
SimpleInstaller.hookStdOut(prog);
@@ -304,7 +284,7 @@ public void run(ProgressCallback monitor) {
304284
"The following addresse did not have valid certificates: " + badCerts + "<br>" +
305285
"This typically happens with an outdated java install. Try updating your java install from https://adoptium.net/";
306286
}
307-
JOptionPane.showMessageDialog(null, message, "Error", JOptionPane.ERROR_MESSAGE);
287+
JOptionPane.showOptionDialog(null, message, "Error", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE, null, new Object[]{"Ok", SwingUtil.createLogButton()}, "");
308288
e.printStackTrace();
309289
} finally {
310290
prog.dispose();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package net.minecraftforge.installer;
2+
3+
import javax.swing.*;
4+
import java.awt.*;
5+
import java.io.File;
6+
import java.io.IOException;
7+
8+
public class SwingUtil {
9+
public static JButton createLogButton() {
10+
JButton button = new JButton("Open log");
11+
button.addActionListener(ev -> {
12+
File file = new File("installer.log");
13+
try {
14+
if (file.exists())
15+
Desktop.getDesktop().open(file);
16+
} catch (IOException e) {
17+
// Handle any errors that may occur during file opening
18+
e.printStackTrace();
19+
20+
// Show the error. Does not happen on headless.
21+
// Can only occur on NON-Headless, so its safe to just show the error
22+
JOptionPane.showMessageDialog(null, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
23+
}
24+
});
25+
return button;
26+
}
27+
}

src/main/java/net/minecraftforge/installer/actions/Action.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import net.minecraftforge.installer.SimpleInstaller;
1919
import net.minecraftforge.installer.json.Artifact;
2020
import net.minecraftforge.installer.json.InstallV1;
21+
import net.minecraftforge.installer.SwingUtil;
2122
import net.minecraftforge.installer.json.Util;
2223
import net.minecraftforge.installer.json.Version;
2324
import net.minecraftforge.installer.json.Version.Download;
@@ -40,7 +41,7 @@ protected Action(InstallV1 profile, ProgressCallback monitor, boolean isClient)
4041

4142
protected void error(String message) {
4243
if (!SimpleInstaller.headless)
43-
JOptionPane.showMessageDialog(null, message, "Error", JOptionPane.ERROR_MESSAGE);
44+
JOptionPane.showOptionDialog(null, message, "Error", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE, null, new Object[]{"Ok", SwingUtil.createLogButton()}, "");
4445
monitor.stage(message);
4546
}
4647

src/main/java/net/minecraftforge/installer/actions/PostProcessors.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import net.minecraftforge.installer.json.Artifact;
3737
import net.minecraftforge.installer.json.Install.Processor;
3838
import net.minecraftforge.installer.json.InstallV1;
39+
import net.minecraftforge.installer.SwingUtil;
3940
import net.minecraftforge.installer.json.Version.Library;
4041
import net.minecraftforge.installer.json.Util;
4142

@@ -281,7 +282,7 @@ private void handleError(Throwable e) {
281282

282283
private void error(String message) {
283284
if (!SimpleInstaller.headless)
284-
JOptionPane.showMessageDialog(null, message, "Error", JOptionPane.ERROR_MESSAGE);
285+
JOptionPane.showOptionDialog(null, message, "Error", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE, null, new Object[]{"Ok", SwingUtil.createLogButton()}, "");
285286
for (String line : message.split("\n"))
286287
monitor.message(line);
287288
}

src/main/java/net/minecraftforge/installer/json/Util.java

+1
Original file line numberDiff line numberDiff line change
@@ -143,4 +143,5 @@ public static String replaceTokens(Map<String, ? extends Supplier<String>> token
143143

144144
return buf.toString();
145145
}
146+
146147
}

0 commit comments

Comments
 (0)