2011-11-12 26 views
5

Jeśli nigdy nie grałeś w Minecrafta, to tak działają mechanizmy programu uruchamiającego.Co jest potrzebne do uruchomienia zewnętrznych plików JAR, takich jak program uruchamiający Minecraft?

Użytkownik może pobrać plik JAR (lub plik JAR spakowany w plik EXE), który w ogóle nie zawiera kodu dla klienta Minecraft. Jest to uważane za program uruchamiający. Po uruchomieniu programu uruchamiającego wyświetla ekran logowania z wiadomościami itp. Następnie, po zalogowaniu, program uruchamiający uruchamia główny rdzeń Minecraft, minecraft.jar. Jeśli nie ma go w systemie, pobiera go. Program uruchamiający Minecraft nie potrzebuje żadnych zewnętrznych bibliotek Java do uruchomienia.

Jak to zrobić?

Obecnie próbuję replikować funkcjonalność, jednak gdy eksportuję jako działający JAR w Eclipse, kiedy próbuję go uruchomić, wypisuje "Nie można znaleźć głównej klasy launcher.jar. Program zostanie zakończony" (to jest na konsoli, chcę być w stanie kliknąć dwukrotnie JAR i mieć go uruchomić)

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(); 

Odpowiedz

3

Runnable JAR trzeba oczywistym, że wskazuje główne klasy w użyciu. Podczas eksportowania z zaćmienia, opcja polega na wybraniu konfiguracji uruchamiania (z wcześniejszego uruchomienia testowego na przykład), a środowisko Eclipse używa tych informacji do wypełnienia manifestu.

Aktualizacja: Po myślenie o nim trochę więcej, oparty na wyjściu powyżej komentarze poniżej, wydaje mi się, że próbujesz uruchomić słoika za pomocą polecenia „Java” z wiersza poleceń. Jeśli tak jest, trzeba użyć:
java -jar launcher.jar
nie :
java launcher.jar

Oto reprodukcją co myślę zobaczymy:

C:\Users\Tim\Desktop>java launcher.jar
Exception in thread "main" java.lang.NoClassDefFoundError: launcher/jar Caused by:
java.lang.ClassNotFoundException: launcher.jar
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: launcher.jar. Program will exit.

C:\Users\Tim\Desktop>java -jar launcher.jar
Ran

+0

Zrobiłem to, oto zawartość MANIFEST.MF z wyeksportowanego JAR-Manifest-Version: 1.0 C lass-Path:. Klasa główna: główna – liamzebedee

+0

Prawdopodobnie masz klasę o nazwie 'Main.class' (bez pakietu) w tym JAR i ta klasa zawiera poprawnie sformatowaną funkcję' main'? –

+0

Tak, rzeczywiście, rzeczywiście, – liamzebedee

1
// 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());