Um das Sprachproblem für den Startordner zu umgehen, verwenden Sie einfach die Registrierung. Hier ist etwas Code, der funktionieren sollte. Dies ruft reg.exe auf, um Registrierungsänderungen vorzunehmen.
public class StartupCreator {
public static void setupStartupOnWindows(String jnlpUrl, String applicationName) throws Exception {
String foundJavaWsPath = findJavaWsOnWindows();
String cmd = foundJavaWsPath + " -Xnosplash \"" + jnlpUrl + "\"";
setRegKey("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", applicationName, cmd);
}
public static String findJavaWsOnWindows() {
// Die Pfade, nach denen es nach Java suchen wird
String[] paths = {
// zuerst verwenden Sie das JRE, das zum Starten dieser App verwendet wurde, es wird wahrscheinlich nicht die unten stehenden Pfade erreichen
System.getProperty("java.home") + File.separator + "bin" + File.separator + "javaws.exe",
// zuerst den 64-Bit-Pfad überprüfen, da innerhalb eines 32-Bit-Prozesses system32 tatsächlich syswow64 ist
// 64-Bit-Maschine mit 32-Bit-JRE
System.getenv("SYSTEMROOT") + File.separator + "syswow64" + File.separator + "javaws.exe",
// 32-Bit-Maschine mit 32-Bit-JRE oder 64-Bit-Maschine mit 64-Bit-JRE
System.getenv("SYSTEMROOT") + File.separator + "system32" + File.separator + "javaws.exe",};
return findJavaWsInPaths(paths);
}
public static String findJavaWsInPaths(String[] paths) throws RuntimeException {
String foundJavaWsPath = null;
for (String p : paths) {
File f = new File(p);
if (f.exists()) {
foundJavaWsPath = p;
break;
}
}
if (foundJavaWsPath == null) {
throw new RuntimeException("Konnte den Pfad zur javaws-Ausführungsdatei nicht finden");
}
return foundJavaWsPath;
}
public static String setRegKey(String location, String regKey, String regValue) throws Exception {
String regCommand = "add \"" + location + "\" /v \"" + regKey + "\" /f /d \"" + regValue + "\"";
return doReg(regCommand);
}
public static String doReg(String regCommand) throws Exception {
final String REG_UTIL = "reg";
final String regUtilCmd = REG_UTIL + " " + regCommand;
return runProcess(regUtilCmd);
}
public static String runProcess(final String regUtilCmd) throws Exception {
StringWriter sw = new StringWriter();
Process process = Runtime.getRuntime().exec(regUtilCmd);
InputStream is = process.getInputStream();
int c = 0;
while ((c = is.read()) != -1) {
sw.write(c);
}
String result = sw.toString();
try {
process.waitFor();
} catch (Throwable ex) {
System.out.println(ex.getMessage());
}
if (process.exitValue() == -1) {
throw new Exception("REG QUERY-Befehl wurde mit dem Exit-Code -1 zurückgegeben");
}
return result;
}
}