008
15.12.2007, 16:32 Uhr
~FreiherrEintritt
Gast
|
Ich hab die beiden Fehler verbessert und hab jetzt folgenden Quelltext:
C++: |
public class MyLoader extends ClassLoader { public Class<?> findClass(String filename) { long len = 0; byte[] stream = null; try { RandomAccessFile raf = new RandomAccessFile(filename, "r"); len = raf.length(); System.out.println("Dateilänge beträgt: " + len); stream = new byte[(int)len]; raf.read(stream); raf.close(); System.out.println("Datei gelesen"); } catch (FileNotFoundException e) { System.err.println("Datei nicht gefunden"); return null; } catch (IOException e) { System.err.println("IO-Fehler: " + e.getMessage()); } try { return defineClass(null, stream, 0, (int)len); } catch(ClassFormatError e) { System.err.println("Byte-Array ungültig"); } catch(IndexOutOfBoundsException e) { System.err.println("Ungültiger Offset/Länge"); } catch(SecurityException e) { System.err.println("Ungültige Klasse"); } return null; } }
|
Das ganze wird hier benutzt:
C++: |
public class Laden { public static void main(String[] args) { MyLoader cl = new MyLoader(); Class<?> dummy = cl.findClass("C:\\EinDummy.class"); if(dummy == null) { System.err.println("Laden der Klasse fehlgeschlagen"); return; } System.out.println("Anzahl Methoden: " + dummy.getDeclaredMethods().length); Method[] methods = dummy.getDeclaredMethods(); for(int i=0; i<methods.length; i++) { System.out.println(methods[i].toString()); try { methods[i].invoke(dummy); } catch (InvocationTargetException e) { System.err.println("Exception aus SagA-Methode"); } catch (IllegalAccessException e) { System.err.println("Zugriff auf Methode von hier aus verboten"); } catch (IllegalArgumentException e) { System.err.println("Falsches Objekt: " + e.getMessage()); } } } }
|
Das Laden der Klasse funktioniert, es werden alle Methoden erkannt. invoke soll als erstes Argument das Objekt bekommen, dem die aufzurufende Methode gehört (und dann optional Paramter an dieselbe). So habe ich es auch in vielen Beispielen im Netz gesehen. Leider wird eine IllegalArgumentException geworfen, was genau dann passiert, wenn das erste Argument falsch ist. Was soll ich da bitte sonst übergeben? |