From 3591c955f2a51d0af90322efb21ca828b18f3ffc Mon Sep 17 00:00:00 2001 From: Nothixal Date: Mon, 15 Jan 2024 20:24:34 +1100 Subject: [PATCH] Fixed several launch bugs. - Program exiting before GUI launch. - Moved java modal warnings to compile phase rather than version selection phase. - Removed some unused commented code and methods. --- .../java/org/spigotmc/builder/Bootstrap.java | 34 +++++++------- .../java/org/spigotmc/gui/data/BuildData.java | 44 ++++++++++--------- .../gui/panels/general/GeneralPanel.java | 10 +++++ .../general/settings/SettingsPanel.java | 2 +- .../gui/panels/options/OptionsPanel.java | 2 +- src/main/java/org/spigotmc/utils/Utils.java | 14 +----- 6 files changed, 53 insertions(+), 53 deletions(-) diff --git a/src/main/java/org/spigotmc/builder/Bootstrap.java b/src/main/java/org/spigotmc/builder/Bootstrap.java index d8b6802..dc33694 100644 --- a/src/main/java/org/spigotmc/builder/Bootstrap.java +++ b/src/main/java/org/spigotmc/builder/Bootstrap.java @@ -33,25 +33,25 @@ public class Bootstrap } } - JavaVersion javaVersion = JavaVersion.getCurrentVersion(); - - if ( javaVersion.isUnknown() ) - { - System.err.println( "*** WARNING *** Unsupported Java detected (" + System.getProperty( "java.class.version" ) + "). BuildTools has only been tested up to Java 21. Use of development Java versions is not supported." ); - System.err.println( "*** WARNING *** You may use java -version to double check your Java version." ); - } - - long memoryMb = Runtime.getRuntime().maxMemory() >> 20; - if ( memoryMb < 448 ) // Older JVMs (including Java 8) report less than Xmx here. Allow some slack for people actually using -Xmx512M - { - System.err.println( "BuildTools requires at least 512M of memory to run (1024M recommended), but has only detected " + memoryMb + "M." ); - System.err.println( "This can often occur if you are running a 32-bit system, or one with low RAM." ); - System.err.println( "Please re-run BuildTools with manually specified memory, e.g: java -Xmx1024M -jar BuildTools.jar " + Joiner.on( ' ' ).join( args ) ); - System.exit( 1 ); - } - if ( !guiEnabled ) { + JavaVersion javaVersion = JavaVersion.getCurrentVersion(); + + if ( javaVersion.isUnknown() ) + { + System.err.println( "*** WARNING *** Unsupported Java detected (" + System.getProperty( "java.class.version" ) + "). BuildTools has only been tested up to Java 21. Use of development Java versions is not supported." ); + System.err.println( "*** WARNING *** You may use java -version to double check your Java version." ); + } + + long memoryMb = Runtime.getRuntime().maxMemory() >> 20; + if ( memoryMb < 448 ) // Older JVMs (including Java 8) report less than Xmx here. Allow some slack for people actually using -Xmx512M + { + System.err.println( "BuildTools requires at least 512M of memory to run (1024M recommended), but has only detected " + memoryMb + "M." ); + System.err.println( "This can often occur if you are running a 32-bit system, or one with low RAM." ); + System.err.println( "Please re-run BuildTools with manually specified memory, e.g: java -Xmx1024M -jar BuildTools.jar " + Joiner.on( ' ' ).join( args ) ); + System.exit( 1 ); + } + Builder.logOutput( System.out, System.err ); Builder.main( args ); } diff --git a/src/main/java/org/spigotmc/gui/data/BuildData.java b/src/main/java/org/spigotmc/gui/data/BuildData.java index 43095a3..07f3bf3 100644 --- a/src/main/java/org/spigotmc/gui/data/BuildData.java +++ b/src/main/java/org/spigotmc/gui/data/BuildData.java @@ -95,7 +95,7 @@ public final class BuildData { * * @param buildSettings the buildSettings used to get the current selected spigot version */ - public void updateJavaExecutable(final BuildSettings buildSettings) { + public CompletableFuture updateJavaExecutable(final BuildSettings buildSettings, boolean showModal) { String checkVersion = buildSettings.getVersion(); if (checkVersion.equals("experimental")) { String mostRecent = versions.get(2); @@ -106,12 +106,7 @@ public final class BuildData { checkVersion = mostRecent; } - builds.get(checkVersion).whenComplete((BuildInfo info, Throwable throwable) -> { - if (throwable != null) { - MessageModal.displayError(Utils.getReadableStacktrace(throwable)); - return; - } - + return builds.get(checkVersion).thenApply((BuildInfo info) -> { if (info.getJavaVersions() == null) { info.setJavaVersions(new int[]{ JavaVersion.JAVA_7.getVersion(), @@ -125,7 +120,7 @@ public final class BuildData { final JavaInstallation primary = javaInstallationManager.getPrimaryInstallation(); if (primary.getVersion().getClassFileMajorVersion() >= min.getVersion() && primary.getVersion().getClassFileMajorVersion() <= max.getVersion()) { javaInstallationManager.setSelectedInstallation(primary); - return; + return true; } JavaInstallation newInstallation = null; @@ -143,27 +138,34 @@ public final class BuildData { } if (newInstallation == null) { - String style = Utils.getFileContentsFromResource("web/reset.css"); - String message = Utils.getFileContentsFromResource("web/insufficient_java.html"); - message = message.replace("%STYLESHEET%", ""); - message = message.replace("%JAVA_VERSION_MIN%", min.getName()); - message = message.replace("%JAVA_VERSION_MAX%", max.getName()); - message = message.replace("%VERSION%", buildSettings.getVersion()); - message = message.replace("%OPENJDK_LINK%", Constants.DOWNLOAD_OPENJDK); - message = message.replace("%AZUL_LINK%", Constants.DOWNLOAD_AZUL); - message = message.replace("%ORACLE_LINK%", Constants.DOWNLOAD_ORACLE); + if (showModal) { + String style = Utils.getFileContentsFromResource("web/reset.css"); + String message = Utils.getFileContentsFromResource("web/insufficient_java.html"); + message = message.replace("%STYLESHEET%", ""); + message = message.replace("%JAVA_VERSION_MIN%", min.getName()); + message = message.replace("%JAVA_VERSION_MAX%", max.getName()); + message = message.replace("%VERSION%", buildSettings.getVersion()); + message = message.replace("%OPENJDK_LINK%", Constants.DOWNLOAD_OPENJDK); + message = message.replace("%AZUL_LINK%", Constants.DOWNLOAD_AZUL); + message = message.replace("%ORACLE_LINK%", Constants.DOWNLOAD_ORACLE); - MessageModal.displayError(message); - return; + MessageModal.displayError(message); + } + return false; } javaInstallationManager.setSelectedInstallation(newInstallation); + return true; + }).whenComplete((Boolean completed, Throwable throwable) -> { + if (throwable != null) { + MessageModal.displayError(Utils.getReadableStacktrace(throwable)); + } }); } /** - * @return a copy of the versions list. - * */ + * @return a copy of the versions list. + */ public List getVersions() { return new ArrayList<>(versions); } diff --git a/src/main/java/org/spigotmc/gui/panels/general/GeneralPanel.java b/src/main/java/org/spigotmc/gui/panels/general/GeneralPanel.java index 15b2b2a..00cc66e 100644 --- a/src/main/java/org/spigotmc/gui/panels/general/GeneralPanel.java +++ b/src/main/java/org/spigotmc/gui/panels/general/GeneralPanel.java @@ -1,6 +1,7 @@ package org.spigotmc.gui.panels.general; import java.io.File; +import java.util.concurrent.ExecutionException; import org.spigotmc.gui.BuildToolsProcess; import org.spigotmc.gui.attributes.Lockable; import org.spigotmc.gui.data.BuildSettings; @@ -149,6 +150,15 @@ public class GeneralPanel extends JPanel implements Lockable { } private void buildButtonActionPerformed(ActionEvent event) { + try { + if (!buildData.updateJavaExecutable(buildSettings, true).get()) { + return; + } + } catch (InterruptedException | ExecutionException e) { + MessageModal.displayError(Utils.getReadableStacktrace(e)); + return; + } + cancelButton.setEnabled(true); consolePane.updateConsoleAreaText(new ArrayList<>()); diff --git a/src/main/java/org/spigotmc/gui/panels/general/settings/SettingsPanel.java b/src/main/java/org/spigotmc/gui/panels/general/settings/SettingsPanel.java index d981442..b41b18f 100644 --- a/src/main/java/org/spigotmc/gui/panels/general/settings/SettingsPanel.java +++ b/src/main/java/org/spigotmc/gui/panels/general/settings/SettingsPanel.java @@ -193,7 +193,7 @@ public class SettingsPanel extends JPanel implements Lockable, Themeable { buildSettings.setVersion(selected); if (!buildSettings.isOverrideJavaExecutable()) { - buildData.updateJavaExecutable(buildSettings); + buildData.updateJavaExecutable(buildSettings, false); } consolePane.updateConsoleAreaText(buildData.generatePreCompilationText(buildSettings)); diff --git a/src/main/java/org/spigotmc/gui/panels/options/OptionsPanel.java b/src/main/java/org/spigotmc/gui/panels/options/OptionsPanel.java index c56a337..f62d35e 100644 --- a/src/main/java/org/spigotmc/gui/panels/options/OptionsPanel.java +++ b/src/main/java/org/spigotmc/gui/panels/options/OptionsPanel.java @@ -441,7 +441,7 @@ public class OptionsPanel extends JPanel { this.detectJavaButton.setEnabled(false); this.javaSelectionButton.setEnabled(false); buildSettings.setOverrideJavaExecutable(false); - buildData.updateJavaExecutable(buildSettings); + buildData.updateJavaExecutable(buildSettings, false); } // Text Fields diff --git a/src/main/java/org/spigotmc/utils/Utils.java b/src/main/java/org/spigotmc/utils/Utils.java index 4ac302f..3102c53 100644 --- a/src/main/java/org/spigotmc/utils/Utils.java +++ b/src/main/java/org/spigotmc/utils/Utils.java @@ -91,19 +91,7 @@ public class Utils { } public static boolean isRanFromCommandLine() { - // If a console is available, we're definitely running from command line. - if (System.console() != null) { - return true; - } - - // Naive check for running from command line on Windows. - // If ran from command line or inside most IDEs, the SESSIONNAME environment variable will be set to "Console". - // It will be unset when double-clicking the .jar or when using other OSes - if ("Console".equals(System.getenv("SESSIONNAME"))) { - return true; - } - - return false; + return System.console() != null; } public static boolean isValidPR(String input, Repository repository) {