Devilmarkus Geschrieben 4. Juni 2012 Geschrieben 4. Juni 2012 Hallo zusammen, ich habe folgendes Problem: Ich möchte eine Library verwenden, welche ich leider nicht in Source-Form habe. Das Problem ist aber, dass die .class Dateien direkt im "Root" der .JAR Datei stehen. Import mainclass.class funktioniert also nicht. Die Source, die die Library importieren soll, ist NICHT im Root! Beispiel: Ich habe eine Klasse in classes.media Diese beginnt logischerweise mit Package classes.media; Wie kann ich dieser Klasse nun begreiflich machen, dass sie converter.class aus dem Root importieren soll? Import ../../converter.class geht ja nicht... Gibt es dafür eine Lösung?
Devilmarkus Geschrieben 4. Juni 2012 Autor Geschrieben 4. Juni 2012 Meine Idee wäre ja sowas hier: /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package jemu.ui; /** * * @author Markus */ public class Converter { public Class converter; public void init() { ClassLoader classLoader = Converter.class.getClassLoader(); try { converter = classLoader.loadClass("Converter"); } catch (ClassNotFoundException e) { converter = null; } } } Nur habe ich nun das Problem, dass ich zwar "Converter.class" lese, damit aber nichts anfangen kann? Ich muss ja anschliessend z.b. converter.Cycle(); ausführen können...
speedi Geschrieben 5. Juni 2012 Geschrieben 5. Juni 2012 Spontan würde ich vorschlagen: Dekompilieren und in Packages packen.
Schiller256 Geschrieben 5. Juni 2012 Geschrieben 5. Juni 2012 (bearbeitet) Ich kenne nur den Weg über Reflection. In dem Beispiel unten wird die Klasse via Reflection geladen und dann die in deiner Klasse enthaltenen Methoden aufgerufen. //Klasse ohne package public class Converter { public String sayHello(String name) { return "Hello " + name + "!"; } } Hier jetzt die Klasse die deine Klasse ohne package lädt und auch benutzen kann. package some.packagename; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class ConverterWithPackage { Class converterWithoutPackage; Object converterWithoutPackageInstance; void init() throws ClassNotFoundException, InstantiationException, IllegalAccessException { converterWithoutPackage = Class.forName("Converter"); converterWithoutPackageInstance = converterWithoutPackage.newInstance(); } public void sayHello(String name) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException { Method sayHello = converterWithoutPackage.getMethod("sayHello", new Class[] { String.class }); String hello = (String) sayHello.invoke( converterWithoutPackageInstance, new String[] { name }); System.out.println(hello); } public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException { ConverterWithPackage converterWithPackage = new ConverterWithPackage(); converterWithPackage.init(); converterWithPackage.sayHello("Bernd"); } } Bearbeitet 5. Juni 2012 von Schiller256
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden