add JVM check

This commit is contained in:
Anthony Calosa
2024-10-06 15:29:51 +08:00
parent 4f819a9be3
commit 4dfd344298
5 changed files with 222 additions and 126 deletions

View File

@@ -23,8 +23,17 @@ import forge.error.ExceptionHandler;
import forge.gui.GuiBase;
import forge.gui.card.CardReaderExperiments;
import forge.util.BuildInfo;
import forge.util.JVMOptions;
import io.sentry.Sentry;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.util.ArrayList;
import java.util.List;
/**
* Main class for Forge's swing application view.
*/
@@ -33,12 +42,45 @@ public final class Main {
* Main entry point for Forge
*/
public static void main(final String[] args) {
String javaVersion = System.getProperty("java.version");
checkJVMArgs(javaVersion, args);
}
static void checkJVMArgs(String javaVersion, String[] args) {
RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
List<String> arguments = runtimeMxBean.getInputArguments();
List<Object> options = new ArrayList<>();
JButton ok = new JButton("OK");
options.add(ok);
JVMOptions.getStringBuilder().append("Java Version: ").append(javaVersion).append("\nArguments: \n");
for (String a : arguments) {
if (a.startsWith("-agent") || a.startsWith("-javaagent"))
continue;
JVMOptions.getStringBuilder().append(a).append("\n");
}
JOptionPane pane = new JOptionPane(JVMOptions.getStringBuilder(), JOptionPane.PLAIN_MESSAGE, JOptionPane.DEFAULT_OPTION, null, options.toArray());
JDialog dlg = pane.createDialog(JOptionPane.getRootFrame(), "Error");
ok.addActionListener(e -> {
dlg.setVisible(false);
System.exit(0);
});
dlg.setResizable(false);
if (!JVMOptions.checkRuntime(arguments)) {
dlg.setVisible(true);
} else {
start(args);
}
}
static void start(final String[] args) {
Sentry.init(options -> {
options.setEnableExternalConfiguration(true);
options.setRelease(BuildInfo.getVersionString());
options.setEnvironment(System.getProperty("os.name"));
options.setTag("Java Version", System.getProperty("java.version"));
options.setShutdownTimeoutMillis(5000);
if (options.getDsn() == null)
options.setDsn("https://87bc8d329e49441895502737c069067b@sentry.cardforge.org//3");
}, true);
// HACK - temporary solution to "Comparison method violates it's general contract!" crash
@@ -67,28 +109,27 @@ public final class Main {
// command line startup here
String mode = args[0].toLowerCase();
switch(mode) {
case "sim":
SimulateMatch.simulate(args);
break;
case "parse":
CardReaderExperiments.parseAllCards(args);
CardReaderExperiments.parseAllCards(args);
break;
case "server":
System.out.println("Dedicated server mode.\nNot implemented.");
break;
default:
System.out.println("Unknown mode.\nKnown mode is 'sim', 'parse' ");
break;
}
System.exit(0);
}
@SuppressWarnings("deprecation")
@Override
protected void finalize() throws Throwable {