Red de conocimiento informático - Aprendizaje de programación - Código fuente de la clase de carga

Código fuente de la clase de carga

Después de consultar otros ejemplos e introducciones de zapatos para niños en Internet, se realizaron modificaciones:

Importar Java .io excepción

Importar Java método <. /p>

Importar Java.net.uri;

Importar Java.net.urisynctaxexception;

Importar Java.util.arrays;

Importar javax .tools.Java compilador;

Importar herramientas javax.

Importar objeto de archivo Java. herramientas .javafileobject simple ;

Importar herramientas javax .javafilemanager estándar

Importar herramientas javax . p>*Compilación dinámica de archivos fuente de Java

*

* @author神 Beast儿

*

*/

Prueba del compilador de clase pública {

Public static void main(String[] args) arroja una excepción {

String source = " public class Main { " " public static void Main( String[]args ){ "

" system . println(\ " ¡Hola mundo! \");

Compilador Java = herramienta proveedor . getsystemjavacompiler( );

Administrador de archivos StandardJavaFileManager = compilador . getstandardfilemanager(null, null, null);

Objeto fuente StringSourceJavaObject = new CompilerTest. StringSourceJavaObject("Principal",

Fuente);

Iterable lt? Extienda JavaFileObject gtfile object = arrays. aslist(source object);

//Obtenga la ruta raíz de la clase compilada; de lo contrario, se informará un error y no se podrá encontrar la clase.

ruta de cadena = clase .getclass(). obtenerRecurso("/").

getPath();

Cadena iterable lt gtoptions = Arrays.asList("-d ", ruta);

//Agregar parámetros de opción

// compilación tarea tarea = compilador obtener tarea (nulo, administrador de archivos, nulo, nulo, nulo, objetos de archivo);

tarea de compilación = compilador obtener tarea (nulo, administrador de archivos, nulo, opciones, nulo, objetos de archivo. );

Resultado booleano = tarea . call();

if (resultado){

System.out.println("Compilación exitosa.");

cargador de clases = prueba del compilador. obtener cargador de clases();

Pruebe {

Clase lt? gtclazz = loader . load class(" Main ");

método método = clazz . get método(" main ", String[]. class); parámetros; de lo contrario, se informará falsamente el número de parámetros.

//Valor del objeto = método. invoke(nulo, nuevo objeto[]{ });

Valor del objeto = método.invoke(nulo, nuevo objeto[]{ nueva cadena[ ]{ } });

System.out.println(valor);

} catch(Exception e) {

e . /p>

}

}

}

La clase estática StringSourceJavaObject extiende SimpleJavaFileObject {

Contenido de cadena privada = nulo

público StringSourceJavaObject(nombre de cadena, contenido de cadena) lanza URISyntaxException {

super(uri . create(" cadena:///" nombre . reemplazar(' . ') ,'/') Kind.SOURCE.extension),

Amabilidad. fuente);

this.content = content;

}

secuencia de caracteres públicos getCharContent(booleano ignorar errores de codificación) lanza IOException {

Devolver contenido;

}

}

}