Oi malta!
Estou usando este codigo que achei no forum para carregar todos os classes de uma pasta
package launcher;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
public class Launch implements Runnable {
private static String[] arguments;
public static void main(String args[]) {
arguments = args;
try {
new Thread((Runnable)Class.forName("launcher.Launch").newInstance()).start();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void run() {
try {
File temp = new File(".");
File[] files = temp.listFiles();
ArrayList aFiles = new ArrayList();
for (int i = 0; i < files.length; i ++) {
if (files[i].getName().endsWith(".jar") || files[i].getName().endsWith(".zip")) {
System.out.println("adicionando " + files[i].getCanonicalFile());
aFiles.add(new URL("jar", "", "file:" + files[i].getAbsolutePath() + "!/"));
}
}
URL[] url = new URL[aFiles.size()];
for (int i = 0; i < aFiles.size(); i ++) {
url[i] = (URL)aFiles.get(i);
}
URLClassLoader l = new URLClassLoader(url);
Thread.currentThread().setContextClassLoader(l);
System.out.println("preparando carga do programa");
* Class loadedClass = l.loadClass("sua.classe.que.contem.o.main");
System.out.println("buscando método main");
Method method = loadedClass.getMethod("main", new Class[] { String[].class });
System.out.println("invocando método main");
method.invoke(method, new Object[] { Launch.arguments });
System.out.println("método main invocado!!!");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
O meu codigo ta um pouco modificado mas a base é essa
Agora tenho um problema, se eu chamar Toolkit.getDefaultToolkit().getImage(new File("splash.png").getAbsolutePath()); antes de carregar os jars, ele carrega o programa , mas eu estou a usar o ApplicationFramework e esse jar, como é obvio, é carregado pelo launcher.
Da me erro a carregar e salvar a sessão, pêlo que me parece eles serealizão objectos.
O erro é este:
11/Dez/2007 13:15:33 org.jdesktop.application.SingleFrameApplication initRootPaneContainer
WARNING: couldn't restore sesssion [mainFrame.session.xml]
org.jdesktop.application.LocalStorage$LSException: load failed "mainFrame.session.xml"
at org.jdesktop.application.LocalStorage.load(LocalStorage.java:150)
at org.jdesktop.application.SessionStorage.restore(SessionStorage.java:382)
at org.jdesktop.application.SingleFrameApplication.initRootPaneContainer(SingleFrameApplication.java:231)
at org.jdesktop.application.SingleFrameApplication.show(SingleFrameApplication.java:463)
at mike.instmess.InstantMess.startup(InstantMess.java:19)
at org.jdesktop.application.Application$1.run(Application.java:171)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.jdesktop.application.SessionStorage$WindowState
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.sun.beans.ObjectHandler.classForName(Unknown Source)
at com.sun.beans.ObjectHandler.classForName(Unknown Source)
at com.sun.beans.ObjectHandler.classForName2(Unknown Source)
at com.sun.beans.ObjectHandler.startElement(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at java.beans.XMLDecoder.getHandler(Unknown Source)
at java.beans.XMLDecoder.readObject(Unknown Source)
at org.jdesktop.application.LocalStorage.load(LocalStorage.java:148)
... 13 more