this repo has no description
at main 118 lines 3.0 kB view raw
1package boot; 2 3import java.awt.Desktop; 4import java.awt.GraphicsEnvironment; 5import java.net.URI; 6 7import javax.swing.JOptionPane; 8 9public class StarRodBootstrap 10{ 11 public static void main(String[] args) 12 { 13 boolean isCommandLine = args.length > 0 || GraphicsEnvironment.isHeadless(); 14 15 String version = System.getProperty("java.version"); 16 if (getMajorVersion(version) < 17) { 17 showDownloadMessage(isCommandLine, version); 18 System.exit(-1); 19 } 20 21 try { 22 launchApp(isCommandLine, args); 23 } 24 catch (Exception e) { 25 System.err.println("Exception during bootstrap: " + e.getMessage()); 26 e.printStackTrace(); 27 } 28 } 29 30 private static int getMajorVersion(String version) 31 { 32 String[] parts = version.split("\\."); 33 if (parts[0].equals("1")) { 34 // Java 8 or earlier: format "1.x" 35 return Integer.parseInt(parts[1]); 36 } 37 else { 38 // Java 9 or later: format "x" 39 return Integer.parseInt(parts[0]); 40 } 41 } 42 43 private static void launchApp(boolean isCommandLine, String[] args) throws Exception 44 { 45 String javaHome = System.getProperty("java.home"); 46 String javaExec = javaHome + "/bin/java"; 47 48 String jarPath = StarRodBootstrap.class 49 .getProtectionDomain() 50 .getCodeSource() 51 .getLocation() 52 .toURI() 53 .getPath(); 54 55 String[] command = new String[4 + args.length]; 56 command[0] = javaExec; 57 command[1] = "-cp"; 58 command[2] = jarPath; 59 command[3] = "app.StarRodMain"; 60 System.arraycopy(args, 0, command, 4, args.length); 61 62 ProcessBuilder processBuilder = new ProcessBuilder(command); 63 processBuilder.inheritIO(); 64 Process process = processBuilder.start(); 65 process.waitFor(); 66 } 67 68 private static void showDownloadMessage(boolean isCommandLine, String version) 69 { 70 String downloadUrl = "https://www.oracle.com/java/technologies/downloads/"; 71 72 if (isCommandLine) { 73 System.out.println("Java 17 or later is required to run this application."); 74 System.out.println("Your current version: " + version); 75 System.out.println("Download the latest version from:"); 76 System.out.println(downloadUrl); 77 } 78 else { 79 80 String errorMsg = "<html><body>" 81 + "Java 17 or later is required to run this application.<br>" 82 + "Your current version: <b>" + version + "</b><br><br>" 83 + "Download the latest version from:<br>" 84 + "<a href='" + downloadUrl + "'>" + downloadUrl + "</a>" 85 + "</body></html>"; 86 87 int result = JOptionPane.showOptionDialog( 88 null, 89 errorMsg, 90 "Java Version Error", 91 JOptionPane.DEFAULT_OPTION, 92 JOptionPane.ERROR_MESSAGE, 93 null, 94 new String[] { "Open Link", "Close" }, 95 "Open Link" 96 ); 97 98 if (result == 0) { 99 openLink(downloadUrl); 100 } 101 } 102 } 103 104 private static void openLink(String url) 105 { 106 try { 107 if (Desktop.isDesktopSupported()) { 108 Desktop.getDesktop().browse(new URI(url)); 109 } 110 else { 111 System.err.println("Desktop is not supported. Open this link manually: " + url); 112 } 113 } 114 catch (Exception e) { 115 System.err.println("Failed to open link: " + e.getMessage()); 116 } 117 } 118}