Der unten stehende Code soll eine Datei (File f), die Java-Bytecode enthält, aber nicht mit *.class endet, per ClassLoader nachladen. Wenn ich den ersten Block weglasse und eine datei mit *.class Endung (elber Inhalt) angebe, funktioniert das Laden problemlos. Was mache ich falsch?
Danke für eure Mühe,
campino
Code:
//Anfang Block 1
File af=new File(f.getName().substring(0, f.getName().lastIndexOf("."))+".class");
af.createNewFile();
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(f)));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(af)));
String line;
while((line=br.readLine())!=null){
bw.write(line);
}
bw.flush();
bw.close();
br.close();
//Ende Block 1
ClassLoader cl=ClassLoader.getSystemClassLoader();
try{
Class n=cl.loadClass(f.getName().substring(0, f.getName().lastIndexOf(".")));
Class[] in=n.getInterfaces();
boolean imp=false;
for(int a=0;a<in.length;a++){
Class is=in[a];
if(is.equals(RApplikation.class)){
imp=true;
break;
}
}
if(imp){
RApplikation ra=(RApplikation)n.newInstance();
ra.setRoomanizer2DHandle(r2d.new Handle());
ra.run();
}else{
new JMessage(f.getName()+" ist keine gültige *.rjf-Datei", "Fehler!", "Okay");
}
}catch(ClassNotFoundException e){
new JMessage(f.getName()+" ist keine gültige *.rjf-Datei", "Fehler!", "Okay");
System.out.println(e.toString());
}catch(IllegalAccessException e){
new JMessage(f.getName()+" kann nicht gestartet werden.", "Fehler!", "Okay");
System.out.println(e.toString());
}catch(InstantiationException e){
new JMessage(f.getName()+" kann nicht gestartet werden.", "Fehler!", "Okay");
System.out.println(e.toString());}
Danke für eure Mühe,
campino