Hallo ich versuch in einem Programm andere externe jar's zu laden und auszuführen.
Kompatibilität wird durch interfaces geregelt:
aber von den externen programmen werden, wenn sie bilder oder andere dateien enthalten nicht geladen und das frame bleibt leer.
so wie bei dem hier.
also ohne reflection klappt alles aber so keine chance.
Bitte um lösungsvorschläge.
Danke!
Kompatibilität wird durch interfaces geregelt:
Java:
package reflection;
import interfaces.Extprogramme;
import interfaces.Javadosinterface;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import javax.swing.JInternalFrame;
import visuals.Mainwin;
import dateverwaltung.Dateien;
public class Reflectionjre {
@SuppressWarnings("unchecked")
Class refelected=null;
Extprogramme progint =null;
JInternalFrame inframe=null;
Thread thist = null;
String name=null;
@SuppressWarnings({ "deprecation" })
public
Reflectionjre(String edtfile,final String[] args) throws MalformedURLException, ClassNotFoundException, InstantiationException, IllegalAccessException{
String[] edts = new Dateien().getInfoFile(edtfile);
URLClassLoader jrec = new URLClassLoader(new URL[]{new File(edts[0]).toURL()});
refelected = jrec.loadClass(edts[1]);
progint = (Extprogramme)refelected.newInstance();
name=progint.getProcessname();
thist = new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
inframe = progint.getFrame();
progint.setinterf((Javadosinterface)Mainwin.get());
try {
inframe.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
Mainwin.addInternalFrame(inframe);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
progint.main(args);
System.out.println("hi");
}});
}
public void start(){
thist.start();
}
@SuppressWarnings("deprecation")
public void kill(){
try {
thist.stop();
thist.destroy();
} catch (Exception e) {
// TODO: handle exception
}
}
public String getName(){
return null;
}
}
aber von den externen programmen werden, wenn sie bilder oder andere dateien enthalten nicht geladen und das frame bleibt leer.
so wie bei dem hier.
Java:
package one;
import java.awt.GridLayout;
import interfaces.Extprogramme;
import interfaces.Javadosinterface;
import javax.swing.ImageIcon;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
public class One implements Extprogramme{
/**
* @param args
*/
static JInternalFrame disp=new JInternalFrame("Hallo",true,true,true,true);
static Javadosinterface interf ;
public void main(String[] args) {
// TODO Auto-generated method stub
disp.setTitle("Jetzt hab ich einen anderen Namen");
disp.setResizable(true);
disp.setVisible(true);
disp.setBounds(0, 0, 200, 200);
interf.setTitle("Upps ich hab den Titel des MainFrames geändert");
disp.setLayout(new GridLayout(0,1,0,0));
String logo = "one/alba2.jpg";
java.net.URL logourl = ClassLoader.getSystemResource( logo );
JLabel l = new JLabel("HALLO");
disp.add(l);
l.setIcon(new ImageIcon(logourl));
}
@Override
public JInternalFrame getFrame() {
// TODO Auto-generated method stub
return disp;
//Das Frame das angezeigt werden soll
}
@Override
public void kill() {
// TODO Auto-generated method stub
disp.setVisible(false);
//kann vom hauptprogramm aufgerufen werden wenn das programm sterben soll
}
@Override
public void start() {
// TODO Auto-generated method stub
main(null);
//nicht in benutzung
}
@Override
public void stop() {
// TODO Auto-generated method stub
System.exit(0);
}
@Override
public String getProcessname() {
// TODO Auto-generated method stub
return "Testprozess";
}
@Override
public void setinterf(Javadosinterface in) {
// TODO Auto-generated method stub
interf=in;
// um das interface vom hauptprogramm zu bekommen javadosinterface
}
}
also ohne reflection klappt alles aber so keine chance.
Bitte um lösungsvorschläge.
Danke!