From 8201095b0d0f3c9c2f1a03d604e4aa9515ad99f6 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Thu, 16 Jan 2014 07:13:15 +0000 Subject: [PATCH] Let sample applet use a plain class loader within the luajava library. --- examples/jse/SampleApplet.java | 38 ++++++++++++++++++-- src/jse/org/luaj/vm2/lib/jse/LuajavaLib.java | 2 +- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/examples/jse/SampleApplet.java b/examples/jse/SampleApplet.java index b2ec9310..c39841c8 100644 --- a/examples/jse/SampleApplet.java +++ b/examples/jse/SampleApplet.java @@ -4,10 +4,21 @@ import java.io.InputStream; import java.net.URL; import org.luaj.vm2.Globals; +import org.luaj.vm2.LoadState; import org.luaj.vm2.LuaValue; +import org.luaj.vm2.compiler.LuaC; +import org.luaj.vm2.lib.Bit32Lib; +import org.luaj.vm2.lib.CoroutineLib; +import org.luaj.vm2.lib.PackageLib; import org.luaj.vm2.lib.ResourceFinder; +import org.luaj.vm2.lib.StringLib; +import org.luaj.vm2.lib.TableLib; import org.luaj.vm2.lib.jse.CoerceJavaToLua; -import org.luaj.vm2.lib.jse.JsePlatform; +import org.luaj.vm2.lib.jse.JseBaseLib; +import org.luaj.vm2.lib.jse.JseIoLib; +import org.luaj.vm2.lib.jse.JseMathLib; +import org.luaj.vm2.lib.jse.JseOsLib; +import org.luaj.vm2.lib.jse.LuajavaLib; /** * Simple Applet that forwards Applet lifecycle events to a lua script. @@ -59,8 +70,20 @@ public class SampleApplet extends Applet implements ResourceFinder { script = default_script; System.out.println("Loading " + script); - // Construct globals to use. - globals = JsePlatform.standardGlobals(); + // Construct globals specific to the applet platform. + globals = new Globals(); + globals.load(new JseBaseLib()); + globals.load(new PackageLib()); + globals.load(new Bit32Lib()); + globals.load(new TableLib()); + globals.load(new StringLib()); + globals.load(new CoroutineLib()); + globals.load(new JseMathLib()); + globals.load(new JseIoLib()); + globals.load(new JseOsLib()); + globals.load(new AppletLuajavaLib()); + LoadState.install(globals); + LuaC.install(globals); // Use custom resource finder. globals.FINDER = this; @@ -127,4 +150,13 @@ public class SampleApplet extends Applet implements ResourceFinder { return null; } } + + public static final class AppletLuajavaLib extends LuajavaLib { + public AppletLuajavaLib() {} + protected Class classForName(String name) throws ClassNotFoundException { + // Use plain class loader in applets. + return Class.forName(name); + } + } + } diff --git a/src/jse/org/luaj/vm2/lib/jse/LuajavaLib.java b/src/jse/org/luaj/vm2/lib/jse/LuajavaLib.java index 749bca73..7091f89a 100644 --- a/src/jse/org/luaj/vm2/lib/jse/LuajavaLib.java +++ b/src/jse/org/luaj/vm2/lib/jse/LuajavaLib.java @@ -109,7 +109,7 @@ public class LuajavaLib extends VarArgFunction { // LuaValue modname = args.arg1(); LuaValue env = args.arg(2); LuaTable t = new LuaTable(); - bind( t, LuajavaLib.class, NAMES, BINDCLASS ); + bind( t, this.getClass(), NAMES, BINDCLASS ); env.set("luajava", t); env.get("package").get("loaded").set("luajava", t); return t;