Hola, muy buenas a tod@s!
El proceso es simple: estoy intentando crear una aplicación con una librería compilada en un .jar. Al compilar el programa principal (el comando lo mostraré ahora)no me sale ningún error, pero a la hora de ejecutar el archivo .class con un CLASSPATH en el directorio del .jar me dice 'No se ha encontrado la clase principal Main',pero esa es la única clase escrita en el .java
Comandos usados:
javac -cp "lwjgl.jar" Main.java (No da ningún error, me crea un .class)
set CLASSPATH="C:\Users\Carlos\Desktop\Game" (No da ningún error)
java Main (El error antes mencionado)
ESPERO QUE ME PUEDAN AYUDAR. GRACIAS POR SU ATENCIÓN
Ve las versiones de java, quizás no sea esto (Y sinceramente no leí muy detenidamente tu mensaje) Pero usualmente cuando se intenta ejecutar un software hecho en una versión de java mas actual que la versión instalada te da como error que el MAIN no fue encontrado.
Buen día,
¿En el folder Game están tus .class?
Lo digo porque el objetivo del Class Path en Java es localizar los ficheros .class que te genera el compilador.
Crea una carpeta llamada META-INF dentro de src. Dentro crea un archivo llamado MANIFEST.MF en el cual pondrás en el Class Path las librerías de las que hagas uso (JARs). Por ejemplo:
Main-Class
com.company.app.Main
Classpath
Class-Path: lib/json.jar lib/slf4j.jar
En el ejemplo anterior las librerías están en el folder lib. Por eso en mi classpath coloco lib/[libreria] para que se agregue al classpath.
Main-Class indica la clase principal. En el caso anterior está en el paquete com.company.app y se llama Main.
Espero sea de utilidad. Un saludo.
La cosa es que tanto jars como archivos .java (solo hay uno) están en una sola carpeta, entonces no se donde poner ese META-INF
¿No usas IDE? Poner todo en un solo lugar es no tener ningún tipo de organización en el proyecto. Todo IDE te crea una estructura estándar de directorios.
En todo caso compila:
javac -cp "*" Main.java
Y ejecuta:
java -cp "*" Main
El compilador y el runtime interpreta "*" como todos los JARs. Así que, como tienes todos los JARs con el código fuente sin paquetes ni nada, se debe colocar "*". Si tuvieras los JARs en un folder llamado lib, se cambiaría por "lib/*" (necesario JDK 7+).
Saludos.
Es que como solo estaba haciendo pruebas ya que nunca había usado un jar como librería, no tenía nada organizado :P
Me sale el mismo error...
Gracias por responder
No es que no detecte las librerías, te está diciendo que no detecta el método main en la clase Main, lo que me parece muy raro. ¿Estás seguro que el método main está correctamente escrito?
Completa y absolutamente:
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.PixelFormat;
import org.lwjgl.opengl.ContextAttribs;
import static org.lwjgl.opengl.GL11.glViewport;
public class Main {
public static final int WIDTH = 1280;
public static final int HEIGHT = 720;
public static final int FPS_CAP = 60;
public static void Init() {
ContextAttribs Attribs = new ContextAttribs(3, 2).withForwardCompatible(true).withProfileCore(true);
try {
Display.setDisplayMode(new DisplayMode(WIDTH, HEIGHT));
Display.create(new PixelFormat(), Attribs);
} catch(LWJGLException Ex) {
Ex.printStackTrace();
}
glViewport(0, 0, WIDTH, HEIGHT);
}
public static void Core() {
Display.sync(FPS_CAP);
Display.update();
}
public static void Close() {
Display.destroy();
}
public static void main(String[] args) {
Main.Init();
while(!Display.isCloseRequested()) {
Main.Core();
}
Main.Close();
}
}
Viste el tema de tener java actualizado. Hablo en serio, se que parece estúpido, ya que el error apunta claramente al Main, pero por alguna razón Java lo hace así. Descarga la ultima versión de Java y dime si sigue el error.
https://www.java.com/es/download/ (https://www.java.com/es/download/)
Tanto con Java Development Kit como con Java Runtime Enviroment tengo las versiones 8, Update 40 de 64 bits
Puedes intentar con otro programa simple, algo que sume, para ver si te compila bien todo.? :P