diff options
Diffstat (limited to 'NET/worlds/scape/WobClassLoader.java')
| -rw-r--r-- | NET/worlds/scape/WobClassLoader.java | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/NET/worlds/scape/WobClassLoader.java b/NET/worlds/scape/WobClassLoader.java new file mode 100644 index 0000000..cc7b8d5 --- /dev/null +++ b/NET/worlds/scape/WobClassLoader.java @@ -0,0 +1,96 @@ +package NET.worlds.scape; + +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.util.Hashtable; + +public class WobClassLoader extends ClassLoader { + static Hashtable loaders = new Hashtable(); + Hashtable classes = new Hashtable(); + String zipName; + + public static synchronized Class get(String zipName, String cname) { + WobClassLoader cl = (WobClassLoader)loaders.get(zipName); + if (cl == null) { + cl = new WobClassLoader(zipName); + loaders.put(zipName, cl); + } + + try { + return cl.loadClass(cname, true); + } catch (ClassNotFoundException var4) { + return null; + } + } + + public WobClassLoader(String n) { + this.zipName = n; + } + + @Override + protected synchronized Class loadClass(String cname, boolean resolve) throws ClassNotFoundException { + Class cl = (Class)this.classes.get(cname); + if (cl == null) { + try { + return this.findSystemClass(cname); + } catch (NoClassDefFoundError var7) { + } catch (ClassNotFoundException var8) { + } + + byte[] data = this.loadData(cname); + if (data != null) { + try { + cl = this.defineClass(data, 0, data.length); + } catch (ClassFormatError var6) { + throw new ClassNotFoundException(cname); + } + } + + if (cl == null || !cname.equals(cl.getName())) { + throw new ClassNotFoundException(cname); + } + + this.classes.put(cname, cl); + } + + if (resolve) { + this.resolveClass(cl); + } + + return cl; + } + + private byte[] loadData(String cname) { + byte[] data = (byte[])null; + InputStream in = null; + + byte[] var7; + try { + if (cname == null) { + return null; + } + + File file = new File(this.zipName); + int len = (int)file.length(); + in = new FileInputStream(file); + data = new byte[len]; + if (in.read(data) != len) { + return null; + } + + var7 = data; + } catch (Exception var16) { + return null; + } finally { + if (in != null) { + try { + in.close(); + } catch (Exception var15) { + } + } + } + + return var7; + } +} |