2011-11-12 10 views
5

Se non hai mai giocato a Minecraft, questo è il modo in cui funziona la meccanica del launcher.Cosa è necessario per avviare file JAR esterni, come il launcher di Minecraft?

L'utente può scaricare un JAR (o un JAR impacchettato in un file EXE), che non ha assolutamente alcun codice per il client Minecraft. Questo è considerato il programma di avvio. All'avvio del programma di avvio, viene visualizzata una schermata di accesso con notizie, ecc. Quindi, dopo aver effettuato l'accesso, il programma di avvio esegue quindi il nucleo principale di Minecraft, minecraft.jar. Se non è presente nel sistema, lo scarica. Il launcher di Minecraft non ha bisogno di alcuna libreria Java esterna per essere eseguito.

Come funziona?

Attualmente sto cercando di replicare la funzionalità, tuttavia, quando esporto come JAR eseguibile in Eclipse, quando provo a lanciarlo, viene stampato "Impossibile trovare la classe principale launcher.jar. Il programma verrà chiuso" (questo è sulla console, voglio essere in grado di fare doppio clic sul JAR e lo hanno lanciare)

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

risposta

3

JAR Runnable hanno bisogno di un manifesto che indica la classe principale da utilizzare. Durante l'esportazione da Eclipse, un'opzione è selezionare una configurazione di esecuzione (da un'esecuzione di test precedente per esempio) ed eclipse utilizza tali informazioni per popolare il manifest.

Aggiornamento: Dopo averci pensato un po 'di più, in base all'output sopra e ai commenti sottostanti, suppongo che stiate cercando di eseguire il jar usando il comando' java 'dalla riga di comando. Se questo è il caso, è necessario utilizzare:
java -jar launcher.jar
non :
java launcher.jar

Ecco una riproduzione di quello che pensi vedere:

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

Ho fatto questo, ecco i contenuti di MANIFEST.MF dal JAR esportato - Versione Manifesta: 1.0 C lass-Path:. Main-Class: Main – liamzebedee

+0

Presumibilmente hai una classe chiamata 'Main.class' (senza pacchetto) in quel JAR e quella classe contiene una funzione' main' correttamente formattata? –

+0

Sì, sì, – 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()); 
Problemi correlati