2011-11-12 6 views
5

Si nunca jugaste Minecraft, entonces así es como funciona la mecánica del lanzador.¿Qué se necesita para iniciar archivos JAR externos, como el iniciador de Minecraft?

El usuario puede descargar un JAR (o un JAR empaquetado en un EXE), que no tiene absolutamente ningún código para el cliente de Minecraft. Esto se considera el lanzador. Cuando se inicia el iniciador, muestra una pantalla de inicio de sesión con noticias, etc. Luego, después de iniciar sesión, el iniciador ejecuta el núcleo principal de Minecraft, minecraft.jar. Si no está presente en el sistema, lo descarga. El iniciador de Minecraft tampoco necesita bibliotecas externas de Java para ejecutarse.

¿Cómo hace esto?

Actualmente estoy tratando de replicar la funcionalidad, sin embargo, cuando exporto como JAR ejecutable en Eclipse, cuando intento ejecutarlo, se imprime "No se pudo encontrar la clase principal launcher.jar. El programa saldrá" (esto está en la consola, yo quiero ser capaz de hacer doble clic en el archivo JAR y tienen que poner en marcha)

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

Respuesta

3

JAR Ejecutable necesita un manifiesto, que indica la clase principal de usar. Al exportar desde eclipse, una opción es seleccionar una configuración de ejecución (desde una prueba anterior, por ejemplo) y eclipse usa esa información para poblar el manifiesto.

Actualización: Después de pensarlo un poco más, basado en el resultado anterior y los comentarios a continuación, supongo que está intentando ejecutar el jar usando el comando 'java' de la línea de comando. Si ese es el caso, es necesario utilizar:
java -jar launcher.jar
no :
java launcher.jar

Aquí es una reproducción de lo que creo que ver:

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

He hecho esto, aquí está el contenido de MANIFEST.MF del JAR exportado - Manifest-Version: 1.0 C Lass-Path:. Main-Class: Main – liamzebedee

+0

¿Presumiblemente tiene una clase llamada 'Main.class' (sin paquete) en ese JAR y esa clase contiene una función' main' correctamente formateada? –

+0

Sí, realmente lo hago – 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()); 
Cuestiones relacionadas