J'essaie de charger la classe en utilisant Class.forName()
mais elle me donne l'exception java.lang.ClassNotFoundException: Test
.Impossible de trouver la classe chargée dynamique
est créé dans le répertoire de travail Eclipse here is the image mais créé en dehors du dossier bin. Si j'essaie de lancer l'invite de commande, cela fonctionne correctement.
ci-dessous le code:
public class CompileString {
public static void main(String arges[]) throws Exception{
JavaCompiler compiler=ToolProvider.getSystemJavaCompiler();
String program = " class Test{" + " public static void main (String [] args){"
+ " System.out.println (\"Hello, World\");"
+ " System.out.println (args.length);" + " }" + "}"
+"interface demo{}"
;
Iterable<? extends JavaFileObject> fileObjects;
fileObjects = getJavaSourceFromString(program);
Boolean result=compiler.getTask(null, null, null, null, null, fileObjects).call();
System.out.println(result);
Class<?> clazz=null;
try {
clazz = Class.forName("Test");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println(clazz);
e.printStackTrace();
}
Method m = clazz.getMethod("main", new Class[] { String[].class });
Object[] _args = new Object[] { new String[0] };
m.invoke(null, _args);
}
static Iterable<JavaSourceFromString> getJavaSourceFromString(String code) {
final JavaSourceFromString jsfs;
jsfs = new JavaSourceFromString("demo", code);
return new Iterable<JavaSourceFromString>() {
public Iterator<JavaSourceFromString> iterator() {
return new Iterator<JavaSourceFromString>() {
boolean isNext = true;
public boolean hasNext() {
return isNext;
}
public JavaSourceFromString next() {
if (!isNext)
throw new NoSuchElementException();
isNext = false;
return jsfs;
}
public void remove() {
throw new UnsupportedOperationException();
}
};
}
};
}
}
Une autre classe:
class JavaSourceFromString extends SimpleJavaFileObject {
final String code;
JavaSourceFromString(String name, String code) {
super(URI.create("string:///" + name.replace('.', '/') + Kind.SOURCE.extension), Kind.SOURCE);
this.code = code;
}
public CharSequence getCharContent(boolean ignoreEncodingErrors) {
return code;
}
}
il me donne le temps d'exécution Exception
java.lang.ClassNotFoundException: Test
Tout fonctionne correctement compilateur JavaCompiler compiler=ToolProvider.getSystemJavaCompiler()
donne true
mais pourquoi je ne suis pas en mesure de trouver le Test.class
.
Le test de classe n'est pas dans votre classpath – Jens
Jens ..thanx pour votre réponse yest il ne chemin de la classe, mais puis-je résoudre ce problème si –
J'essaie de courir en utilisant l'invite de commande cela fonctionne correctement –