mirror of
https://codeberg.org/qg-info-unterricht/zpg-graphentester.git
synced 2026-03-25 04:58:24 +01:00
53 lines
No EOL
1.5 KiB
Java
53 lines
No EOL
1.5 KiB
Java
package control;
|
|
|
|
import java.io.*;
|
|
import java.net.*;
|
|
import java.util.regex.Pattern;
|
|
|
|
/**
|
|
* Hilfsklasse, um Algorithmen-Classen dynamisch nachladen zu können und
|
|
* aktualisierte Class-Dateien während der Laufzeit erneut laden zu können.
|
|
*
|
|
* @author Schaller (nach http://tutorials.jenkov.com/java-reflection/dynamic-class-loading-reloading.html)
|
|
* @version 16.02.2021
|
|
*/
|
|
public class MyClassLoader extends ClassLoader{
|
|
|
|
public MyClassLoader(ClassLoader parent) {
|
|
super(parent);
|
|
}
|
|
|
|
public Class loadClass(String name) throws ClassNotFoundException {
|
|
if(!name.contains("GraphAlgo_"))
|
|
return super.loadClass(name);
|
|
|
|
try {
|
|
|
|
|
|
URL myUrl = new URL("file:"+name.split(Pattern.quote("."))[0]+"/"+name.split(Pattern.quote("."))[1]+".class");
|
|
URLConnection connection = myUrl.openConnection();
|
|
InputStream input = connection.getInputStream();
|
|
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
|
int data = input.read();
|
|
|
|
while(data != -1){
|
|
buffer.write(data);
|
|
data = input.read();
|
|
}
|
|
|
|
input.close();
|
|
|
|
byte[] classData = buffer.toByteArray();
|
|
|
|
return defineClass(name, classData, 0, classData.length);
|
|
|
|
} catch (MalformedURLException e) {
|
|
e.printStackTrace();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
} |