Ich versuche für eine Modding-API einen dynamischen Class Loader zu erstellen. Die API durchsucht einen Ordner und lädt alle Jar-Dateien darin; das ganze sieht dann so aus:
URLClassLoader classLoader = URLClassLoader.newInstance( new URL[] { file.toURI().toURL() } );
Class<?> clazz = classLoader.loadClass( "testmod.MyMod" );
Anschließen erstelle ich ein Constructor-Objekt, um damit eine Instanz der geladenen Klasse zu erhalten (für Debuggingprozesse sind sowohl Jar als auch Klasse in der Jar gehardcoded, dort kann also kein Fehler vorliegen):
Constructor<Mod> constr = Mod.class.getConstructor( String.class,String.class,Version.class,String.class );
Mod mod = constr.newInstance( "...","...",new Version( 0,0,0,0 ),"..." );
Mod ist eine abstrakte Klasse, von welcher die erwähnte Debuggingklasse erbt. Sie hat den Konstruktor (String,String,Version,String).
Die letzte Zeile wirft einen Fehler, der für mich keinen Sinn ergibt:
java.lang.InstantiationException
at java.base/jdk.internal.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488)
at ... (hier eingekürzt)
Worin könnte das Problem liegen?
URLClassLoader classLoader = URLClassLoader.newInstance( new URL[] { file.toURI().toURL() } );
Class<?> clazz = classLoader.loadClass( "testmod.MyMod" );
Anschließen erstelle ich ein Constructor-Objekt, um damit eine Instanz der geladenen Klasse zu erhalten (für Debuggingprozesse sind sowohl Jar als auch Klasse in der Jar gehardcoded, dort kann also kein Fehler vorliegen):
Constructor<Mod> constr = Mod.class.getConstructor( String.class,String.class,Version.class,String.class );
Mod mod = constr.newInstance( "...","...",new Version( 0,0,0,0 ),"..." );
Mod ist eine abstrakte Klasse, von welcher die erwähnte Debuggingklasse erbt. Sie hat den Konstruktor (String,String,Version,String).
Die letzte Zeile wirft einen Fehler, der für mich keinen Sinn ergibt:
java.lang.InstantiationException
at java.base/jdk.internal.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488)
at ... (hier eingekürzt)
Worin könnte das Problem liegen?