Frage

Gibt es eine Möglichkeit Programm von JavaCompiler zusammengestellt zu laufen? [Javax.tools.JavaCompiler]

Mein Code:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
    CompilationTask task = compiler.getTask(null, null, diagnostics, null, null, prepareFile(nazwa, content));
    task.call();

    List<String> returnErrors = new ArrayList<String>();
    String tmp = new String();
    for (Diagnostic diagnostic : diagnostics.getDiagnostics()) {
        tmp = String.valueOf(diagnostic.getLineNumber());
        tmp += " msg: "+ diagnostic.getMessage(null);
        returnErrors.add(tmp.replaceAll("\n", " "));
    }

Jetzt möchte ich das Programm mit einer Lebensdauer 1 Sekunde laufen und Ausgabe auf String-Variablen erhalten. Gibt es eine Möglichkeit, die ich tun könnte?

War es hilfreich?

Lösung

Sie müssen Reflexion verwenden, etwas wie folgt aus:

// Obtain a class loader for the compiled classes
ClassLoader cl = fileManager.getClassLoader(CLASS_OUTPUT);
// Load the compiled class
Class compiledClass = cl.loadClass(CLASS_NAME);
// Find the eval method
Method myMethod = compiledClass.getMethod("myMethod");
// Invoke it
return myMethod.invoke(null);

es natürlich anpassen an Ihre Bedürfnisse anpassen

Andere Tipps

Sie haben die kompilierte Klasse auf den aktuellen Classpath hinzuzufügen.

Es gibt eine Reihe von Möglichkeiten, das zu tun, je nachdem, wie Ihr Projekt eingerichtet ist. Hier ist ein Beispiel unter Verwendung von java.net.URLClassLoader:

ClassLoader cl_old = Thread.currentThread().getContextClassLoader();
ClassLoader cl_new = new URLClassLoader(urls.toArray(new URL[0]), cl_old);

, wobei „Urls“ ist eine Liste von URLs auf das Dateisystem verweist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top