How do i load a plugin class with Java? -
i made small application loads classes folder, displays them in list , when click on 1 displays jpanel in it.
so made api class (baseapp) extends jpanel. made test class extends baseapp , uses apis in it.
now, problem every time click on testapp, gives me exception...
exception in thread "awt-eventqueue-0" java.lang.classcastexception: java.lang.class cannot cast me.delocaz.superapp.baseapp @ me.delocaz.superapp.appselect$2.mouseclicked(appselect.java:76) @ java.awt.awteventmulticaster.mouseclicked(unknown source) @ java.awt.component.processmouseevent(unknown source) @ javax.swing.jcomponent.processmouseevent(unknown source) @ java.awt.component.processevent(unknown source) @ java.awt.container.processevent(unknown source) @ java.awt.component.dispatcheventimpl(unknown source) @ java.awt.container.dispatcheventimpl(unknown source) @ java.awt.component.dispatchevent(unknown source) @ java.awt.lightweightdispatcher.retargetmouseevent(unknown source) @ java.awt.lightweightdispatcher.processmouseevent(unknown source) @ java.awt.lightweightdispatcher.dispatchevent(unknown source) @ java.awt.container.dispatcheventimpl(unknown source) @ java.awt.window.dispatcheventimpl(unknown source) @ java.awt.component.dispatchevent(unknown source) @ java.awt.eventqueue.dispatcheventimpl(unknown source) @ java.awt.eventqueue.access$000(unknown source) @ java.awt.eventqueue$3.run(unknown source) @ java.awt.eventqueue$3.run(unknown source) @ java.security.accesscontroller.doprivileged(native method) @ java.security.protectiondomain$1.dointersectionprivilege(unknown source) @ java.security.protectiondomain$1.dointersectionprivilege(unknown source) @ java.awt.eventqueue$4.run(unknown source) @ java.awt.eventqueue$4.run(unknown source) @ java.security.accesscontroller.doprivileged(native method) @ java.security.protectiondomain$1.dointersectionprivilege(unknown source) @ java.awt.eventqueue.dispatchevent(unknown source) @ java.awt.eventdispatchthread.pumponeeventforfilters(unknown source) @ java.awt.eventdispatchthread.pumpeventsforfilter(unknown source) @ java.awt.eventdispatchthread.pumpeventsforhierarchy(unknown source) @ java.awt.eventdispatchthread.pumpevents(unknown source) @ java.awt.eventdispatchthread.pumpevents(unknown source) @ java.awt.eventdispatchthread.run(unknown source) i have tried cast class got classloader baseapp. how do without crashing?
if need it, here's fileclassloader:
package me.delocaz.superapp; import java.io.file; import java.io.fileinputstream; import java.io.filenotfoundexception; import java.io.ioexception; public class fileclassloader extends classloader { public class<?> findclass(file f) { byte[] b = loadclassdata(f); try { return defineclass(null, b, 0, b.length); } catch (classformaterror ex) { return null; } } private byte[] loadclassdata(file f) { fileinputstream fin; byte filecontent[] = new byte[(int)f.length()]; try { fin = new fileinputstream(f); fin.read(filecontent); } catch (filenotfoundexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); } return filecontent; } } also, casting occurs:
object c = cl.findclass(new file(***class file location***)); system.out.println(c); switchapp((baseapp) c);
an instance of type class not instance of type baseapp, conversion fails. need instantiate class instance of type baseclass, can cast
try calling newinstance() on class instance new instance of loaded class (based on default constructor)
Comments
Post a Comment