From 6a6fe8d862239b8d6d87d28778a5473f1f1fda5a Mon Sep 17 00:00:00 2001 From: SiboVG Date: Tue, 1 Mar 2022 01:47:30 +0100 Subject: [PATCH 1/2] [fixes #1176] Add JRE version checking at startup --- .../sf/openrocket/startup/Application.java | 3 ++ .../sf/openrocket/startup/SwingStartup.java | 50 ++++++++++++++++++- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/core/src/net/sf/openrocket/startup/Application.java b/core/src/net/sf/openrocket/startup/Application.java index 97d99f376..cbccb9a4e 100644 --- a/core/src/net/sf/openrocket/startup/Application.java +++ b/core/src/net/sf/openrocket/startup/Application.java @@ -20,6 +20,9 @@ public final class Application { private static ExceptionHandler exceptionHandler; private static Injector injector; + + // Supported Java Runtime Environment versions in which OR is allowed to run (e.g. '11' for Java 11) + public static int[] SUPPORTED_JRE_VERSIONS = {11, 12, 13}; /** * Return whether to use additional safety code checks. diff --git a/swing/src/net/sf/openrocket/startup/SwingStartup.java b/swing/src/net/sf/openrocket/startup/SwingStartup.java index 7ddaab159..92270957e 100644 --- a/swing/src/net/sf/openrocket/startup/SwingStartup.java +++ b/swing/src/net/sf/openrocket/startup/SwingStartup.java @@ -5,7 +5,10 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.PrintStream; +import java.util.Arrays; +import java.util.stream.IntStream; +import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import javax.swing.Timer; import javax.swing.ToolTipManager; @@ -49,7 +52,7 @@ public class SwingStartup { * OpenRocket startup main method. */ public static void main(final String[] args) throws Exception { - + // Check for "openrocket.debug" property before anything else checkDebugStatus(); @@ -60,6 +63,11 @@ public class SwingStartup { // Initialize logging first so we can use it initializeLogging(); log.info("Starting up OpenRocket version {}", BuildProperties.getVersion()); + + // Check JRE version + if (!checkJREVersion()) { + return; + } // Check that we're not running headless log.info("Checking for graphics head"); @@ -84,7 +92,45 @@ public class SwingStartup { log.info("Startup complete"); } - + + /** + * Checks whether the Java Runtime Engine version is supported. + * + * @return true if the JRE is supported, false if not + */ + private static boolean checkJREVersion() { + String JREVersion = System.getProperty("java.version"); + if (JREVersion != null) { + try { + // We're only interested in the big decimal part of the JRE version + int version = Integer.parseInt(JREVersion.split("\\.")[0]); + if (IntStream.of(Application.SUPPORTED_JRE_VERSIONS).noneMatch(c -> c == version)) { + String title = "Unsupported Java version"; + String message1 = "Unsupported Java version: %s"; + String message2 = "Supported versions: %s"; + String message3 = "Please change the Java Runtime Environment version or install OpenRocket using a packaged installer."; + + StringBuilder message = new StringBuilder(); + message.append(String.format(message1, JREVersion)); + message.append("\n"); + String[] supported = Arrays.stream(Application.SUPPORTED_JRE_VERSIONS) + .mapToObj(String::valueOf) + .toArray(String[]::new); + message.append(String.format(message2, String.join(", ", supported))); + message.append("\n\n"); + message.append(message3); + + JOptionPane.showMessageDialog(null, message.toString(), + title, JOptionPane.ERROR_MESSAGE); + return false; + } + } catch (NumberFormatException e) { + log.warn("Malformed JRE version - " + JREVersion); + } + } + return true; + } + /** * Set proper system properties if openrocket.debug is defined. */ From ef809147e1ca99cd043555f9b70f385679889ff9 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Tue, 1 Mar 2022 18:58:53 +0100 Subject: [PATCH 2/2] Only allow Java 11 runtime version --- core/src/net/sf/openrocket/startup/Application.java | 2 +- swing/src/net/sf/openrocket/startup/SwingStartup.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/net/sf/openrocket/startup/Application.java b/core/src/net/sf/openrocket/startup/Application.java index cbccb9a4e..f298cccfc 100644 --- a/core/src/net/sf/openrocket/startup/Application.java +++ b/core/src/net/sf/openrocket/startup/Application.java @@ -22,7 +22,7 @@ public final class Application { private static Injector injector; // Supported Java Runtime Environment versions in which OR is allowed to run (e.g. '11' for Java 11) - public static int[] SUPPORTED_JRE_VERSIONS = {11, 12, 13}; + public static int[] SUPPORTED_JRE_VERSIONS = {11}; /** * Return whether to use additional safety code checks. diff --git a/swing/src/net/sf/openrocket/startup/SwingStartup.java b/swing/src/net/sf/openrocket/startup/SwingStartup.java index 92270957e..c95860878 100644 --- a/swing/src/net/sf/openrocket/startup/SwingStartup.java +++ b/swing/src/net/sf/openrocket/startup/SwingStartup.java @@ -107,7 +107,7 @@ public class SwingStartup { if (IntStream.of(Application.SUPPORTED_JRE_VERSIONS).noneMatch(c -> c == version)) { String title = "Unsupported Java version"; String message1 = "Unsupported Java version: %s"; - String message2 = "Supported versions: %s"; + String message2 = "Supported version(s): %s"; String message3 = "Please change the Java Runtime Environment version or install OpenRocket using a packaged installer."; StringBuilder message = new StringBuilder();