Purtroppo sono stato costretto a cambiar percorso...non riesco a trovar soluzione a questo problema...
Tornando a quanto proposto da matthew ho creato una classe che dovrebbe caricare una classe esterna:
Codice PHP:
package com.mypackage;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
public class Classe {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// Il mio file si trova nella sottodirectory diretta della home del progetto
File file = new File("./plugins/Plugin.class");
try {
// Ho letto che è preferibile usare toURI().toURL() per convertire in URL
URL url = file.toURI().toURL();
URL[] urls = new URL[]{url};
// Creare un nuovo class loader
ClassLoader cl = new URLClassLoader(urls);
// Caricare la classe
Class cls = cl.loadClass("com.mypackage.Classe");
} catch (MalformedURLException e) {
System.out.println("MALFORMED URL!!!");
e.printStackTrace();
} catch (ClassNotFoundException e) {
System.out.println("CLASS NOT FOUND!!!");
e.printStackTrace();
}
}
}
Il plugin consiste nel seguente file:
Codice PHP:
public class Plugin implements PluginInterface
{
public boolean start()
{
System.out.println(getName()+": starting...");
return true;
}
public boolean stop()
{
System.out.println(getName()+": stopping...");
return true;
}
public String getName()
{
return name;
}
public String getVersion()
{
return version;
}
private final static String name = "The First Plugin";
private final static String version = "0.0.1";
}
con la seguente interfaccia:
Codice PHP:
public interface PluginInterface
{
public boolean start();
public boolean stop();
public String getName();
public String getVersion();
}
Plugin ed interfaccia non sono in alcun package, per evitare di crear altri problemi...
Purtroppo però non riesco ad assegnare la corretta interfaccia alla classe...ho provato con:
Codice PHP:
try {
plugin = (PluginInterface)cls.newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ma mi dice che non è possibile effettuare il casting....qualcuno ha qualche idea?
Purtroppo non ho trovato alcun esempio illuminante per i framework tipo JPF o MJPF, altrimenti avrei provato quella via....