Что нужно для запуска внешних JAR-файлов, таких как Minecraft Launcher? - PullRequest
5 голосов
/ 12 ноября 2011

Если вы никогда не играли в Minecraft, то так работает механика пусковой установки.

Пользователь может загрузить JAR (или JAR, упакованный в EXE-файл), в котором вообще нет кода для клиента Minecraft. Это считается пусковой установкой. Когда запускается лаунчер, он отображает экран входа с новостями и т. Д. Затем, после входа в систему, лаунчер запускает основное ядро ​​Minecraft, minecraft.jar. Если он отсутствует в системе, он загружает его. Для запуска Minecraft также не требуются внешние библиотеки Java.

Как это сделать?

В настоящее время я пытаюсь воспроизвести эту функциональность, однако при экспорте в Eclipse в качестве работающего JAR-файла при попытке его запуска выводится сообщение «Не удалось найти основной класс launcher.jar. на консоли я хочу иметь возможность дважды щелкнуть JAR и запустить его)

File file = new File(System.getProperty("user.dir") + "/lessur.jar"); 
System.setProperty("org.lwjgl.librarypath", System.getProperty("user.dir") + "natives");
URLClassLoader classLoader;
classLoader = URLClassLoader.newInstance(new URL[]{file.toURI().toURL()});          
classLoader.loadClass("zombie.engine.Lighting2").newInstance();

Ответы [ 3 ]

3 голосов
/ 12 ноября 2011

Для запускаемых JAR-файлов необходим Манифест, в котором указывается используемый основной класс. При экспорте из eclipse можно выбрать конфигурацию прогона (например, из предыдущего тестового прогона), и eclipse использует эту информацию для заполнения манифеста.

Обновление: Подумав немного подробнее, основываясь на выводе выше и комментариях ниже, я думаю, что вы пытаетесь запустить jar с помощью команды 'java' из командной строки. Если это так, вам нужно использовать:
java -jar launcher.jar
нет:
java launcher.jar

Вот репродукция того, что, я думаю, вы видите:

C: \ Users \ Tim \ Desktop> java launcher.jar
Исключение в потоке "main" java.lang.NoClassDefFoundError: launcher / jar Причина:
java.lang.ClassNotFoundException: launcher.jar
at java.net.URLClassLoader $ 1.run (неизвестный источник)
at java.security.AccessController.doPrivileged (собственный метод)
at java.net.URLClassLoader.findClass (неизвестный источник)
at java.lang.ClassLoader.loadClass (неизвестный источник)
at sun.misc.Launcher $ AppClassLoader.loadClass (неизвестный источник)
at java.lang.ClassLoader.loadClass (неизвестный источник)
Не удалось найти основной класс: launcher.jar. Программа закроется.

C: \ Users \ Tim \ Desktop> java -jar launcher.jar
Ран

1 голос
/ 13 ноября 2011
// Use the File constructor that will insert the correct separator for the OS
File file = new File(System.getProperty("user.dir"), "lessur.jar"); 
System.out.println( "File exists: " + file.exists() );
File libs = new File(System.getProperty("user.dir"), "natives");
System.out.println( "Libs exists: " + libs.exists() );
System.setProperty("org.lwjgl.librarypath", libs.toString());
0 голосов
/ 11 декабря 2013

Вы должны попробовать Java Decompiler

...