ERLEDIGT
JA
JA
ANTWORTEN
3
3
ZUGRIFFE
3356
3356
EMPFEHLEN
-
Hi!
Ich versuche gerade ein externes Jar nachzuladen, nachladen dürfte funktionieren, jedoch gibt es wohl Verständnisprobleme wie ich nun eine Methode einer nachgeladenen Klasse benutzen kann.
Hier bekomme ich bei invoke eine Exception:Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
public void loadExternalLibary() { try { URL jarURL = new File(this.path + this.jar).toURL(); ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader != null && (classLoader instanceof URLClassLoader)) { URLClassLoader urlClassLoader = (URLClassLoader) classLoader; Method addURL = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class}); addURL.setAccessible(true); addURL.invoke(urlClassLoader, new Object[]{jarURL}); Class tempClass = classLoader.loadClass(this.className); /* check if class really implements needed interface */ Class[] interfaceArray = tempClass.getInterfaces(); for (int i = 0; i < interfaceArray.length; i++) { if (interfaceArray[i].equals(ITrackParser.class)) { /* external class implements needed interface */ this.c = tempClass; break; } } if (this.c == null) { throw new Exception("external class " + this.className + " does not implement needed " + ITrackParser.class); } final String hh = "C:\\work\\projects\\StreetDetection\\src\\main\\resources\\files\\20071207_1sekunde.LOG"; Class[] parameterTypes = new Class[] {String.class}; Method m = this.c.getMethod("getReceiverId"); String ss = (String) m.invoke(this.c); }
Code :1 2 3 4 5 6 7
java.lang.IllegalArgumentException: object is not an instance of declaring class at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.pcd.wam.gegenstandsbereich.streetDetection.locating.controller.OfflineProcessor.loadExternalLibary(OfflineProcessor.java:117) at org.pcd.wam.test.TestOfflineProcessor.main(TestOfflineProcessor.java:16)
Die nachgeladene Klasse sieht so aus:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
package org.pcd.wam.technologie.nmea.parser; import java.util.LinkedList; import java.util.List; import org.pcd.wam.gegenstandsbereich.streetDetection.locating.model.Track; import org.pcd.wam.gegenstandsbereich.streetDetection.locating.parser.ITrackParser; public class DummyParser implements ITrackParser { public String getReceiverId() { // TODO Auto-generated method stub return "dummy wert!"; } public List<Track> getTracks(String s) { List<Track> tList = new LinkedList<Track>(); Track t = new Track(); t.setCmt("dummy wert"); return tList; } }
aufgerufen wird das ganze mit:
Kann mir jemand verraten was ich falsch mache bzw wie ich die Methoden getReceiverId und getTracks ansprechen kann per ReflectionCode :1 2 3 4 5 6 7 8
public static void main(String[] args) { String path = "C:\\work\\"; String jarName = "test.jar"; String className = "org.parser.DummyParser"; FileSystemProcessor f = new FileSystemProcessor(path, jarName, className); f.loadExternalLibary(); }Geändert von y0dA (21.01.08 um 10:14 Uhr)
-
21.01.08 10:16 #2
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
anstatt:
Code java:1
m.invoke(this.c);
das hier:
Code java:1
m.invoke(this.c.newInstance());
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Sauber, danke!
Jedoch verschließt sich mir hier der Sinn - heißt das im Klartext dass ich noch keine Instanz der Klasse hatte?
mfg
-
21.01.08 10:26 #4
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
Ja...
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
Ähnliche Themen
-
Pluginsentwicklung + wie kann ich eine Progressbar ..:-) benutzen
Von daniel38 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 19.11.10, 12:49 -
Methode per reflection an delegate übergeben
Von progo im Forum .NET Application und Service DesignAntworten: 2Letzter Beitrag: 05.06.09, 20:00 -
Reflection benutzen um 2-te Java zu starten
Von kutamn im Forum JavaAntworten: 3Letzter Beitrag: 06.12.08, 22:04 -
Wie kann ich eine Methode in einem Thread starten?
Von Loki2 im Forum JavaAntworten: 4Letzter Beitrag: 07.08.08, 15:19 -
Reflection - wie anwenden/benutzen bei folgendem Problem
Von y0dA im Forum JavaAntworten: 9Letzter Beitrag: 15.01.08, 10:56





Zitieren

Login





