una tipos sencillos registro que programas programa hacer ejemplos ejemplo como clases clase calificaciones alumnos java

tipos - registro de alumnos en java netbeans



$ 0(nombre del programa) en Java? Descubre la clase principal? (8)

Para ampliar en @jodonnell, también puedes obtener todos los rastros de pila en el sistema usando Thread.getAllStackTraces () . A partir de esto, puede buscar todos los rastros de pila para el hilo main para determinar cuál es la clase principal. Esto funcionará incluso si su clase no se ejecuta en el hilo principal.

¿Hay alguna forma de encontrar el nombre del programa que se ejecuta en Java? La clase del método principal sería lo suficientemente buena.


También desde la línea de comando puede ejecutar la herramienta jps . Suena como un

jps -l

te conseguirá lo que quieras


Prueba esto:

StackTraceElement[] stack = Thread.currentThread ().getStackTrace (); StackTraceElement main = stack[stack.length - 1]; String mainClass = main.getClassName ();

Por supuesto, esto solo funciona si estás ejecutando desde el hilo principal. Lamentablemente, no creo que haya una propiedad del sistema que pueda consultar para descubrirlo.

Editar: Extrayendo el comentario de John Meagher, que es una gran idea:

Para ampliar en @jodonnell, también puedes obtener todos los rastros de pila en el sistema usando Thread.getAllStackTraces (). A partir de esto, puede buscar todos los rastros de pila para el subproceso "principal" para determinar cuál es la clase principal. Esto funcionará incluso si su clase no se ejecuta en el hilo principal.


O simplemente puedes usar getClass (). Puedes hacer algo como:

public class Foo { public static final String PROGNAME = new Foo().getClass().getName(); }

Y luego PROGNAME estará disponible en cualquier lugar dentro de Foo. Si no estás en un contexto estático, es más fácil ya que puedes usar esto:

String myProgramName = this.getClass().getName();


Prueba esto :

Las clases de Java tienen una instancia estática de su propia clase (tipo java.lang.Class).

Eso significa que tenemos una clase llamada Main. Entonces podemos obtener su instancia de clase por Main.class

Si estás interesado en el nombre solo entonces,

String className = Main.class.getName ();


Para acceder a los objetos de clase cuando estás en un contexto estático

public final class ClassUtils { public static final Class[] getClassContext() { return new SecurityManager() { protected Class[] getClassContext(){return super.getClassContext();} }.getClassContext(); }; private ClassUtils() {}; public static final Class getMyClass() { return getClassContext()[2];} public static final Class getCallingClass() { return getClassContext()[3];} public static final Class getMainClass() { Class[] c = getClassContext(); return c[c.length-1]; } public static final void main(final String[] arg) { System.out.println(getMyClass()); System.out.println(getCallingClass()); System.out.println(getMainClass()); } }

Obviamente aquí regresarán las 3 llamadas

class ClassUtils

pero entiendes la imagen;

classcontext[0] is the securitymanager classcontext[1] is the anonymous securitymanager classcontext[2] is the class with this funky getclasscontext method classcontext[3] is the calling class classcontext[last entry] is the root class of this thread.


Este es el código que se me ocurrió al usar las respuestas combinadas de jodonnell y John Meagher. Almacena la clase principal en una variable estática para reducir la sobrecarga de llamadas repetidas:

private static Class<?> mainClass; public static Class<?> getMainClass() { if (mainClass != null) return mainClass; Collection<StackTraceElement[]> stacks = Thread.getAllStackTraces().values(); for (StackTraceElement[] currStack : stacks) { if (currStack.length==0) continue; StackTraceElement lastElem = currStack[currStack.length - 1]; if (lastElem.getMethodName().equals("main")) { try { String mainClassName = lastElem.getClassName(); mainClass = Class.forName(mainClassName); return mainClass; } catch (ClassNotFoundException e) { // bad class name in line containing main?! // shouldn''t happen e.printStackTrace(); } } } return null; }


System.getProperty("sun.java.command")