this repo has no description
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}