Java 如何解决lua错误:“;尝试索引?(无价值)“;

Java 如何解决lua错误:“;尝试索引?(无价值)“;,java,indexing,lua,null,luaj,Java,Indexing,Lua,Null,Luaj,关于这种错误已经有很多帖子了,大多数人说它与表和数组索引问题有关。但我根本不使用表,我只是试图调用我创建的库函数,我得到了这个错误。以下是从java调用的lua脚本: String script = new String ( "function event_touch ( )" + " pb.open_form ('view_monster');" + " print ('I ran the lua sc

关于这种错误已经有很多帖子了,大多数人说它与表和数组索引问题有关。但我根本不使用表,我只是试图调用我创建的库函数,我得到了这个错误。以下是从java调用的lua脚本:

String script = new String (  
             "function event_touch (  )"  
            + "   pb.open_form ('view_monster');"
            + "   print ('I ran the lua script');"
            + "end");

PBLUAengine.run_script(script, "event_touch");
static class open_form extends OneArgFunction
{
        public LuaValue call (LuaValue formname)
        {           
            String tmpstr = (String ) CoerceLuaToJava.coerce(formname, java.lang.String.class );

            try
            {               
                PBscreen_game.hide_subscreen(PBscreen_game.MENU_SUBS); 
                PBscreen_game.show_subscreen ( PBscreen_game.FORM_SUBS);
                PBsubscreen_form.open_form ( new PBform_regular ( tmpstr ) );   
            }
            catch (Exception e)
            {
                Gdx.app.error("PBLUAlibrary.open_form", e.getMessage());
            }

            return valueOf ( 0 );
        }
    }
捕获异常时会出现以下错误:

“函数事件\u touch()pb.open\u form('view\u monster');print('I run the lua script');结束:1次尝试索引?(一个零值)”

run_script()函数如下调用脚本(我使用的是luaj):

库方法是这样的,当从java调用时,相同的代码段也可以工作:

String script = new String (  
             "function event_touch (  )"  
            + "   pb.open_form ('view_monster');"
            + "   print ('I ran the lua script');"
            + "end");

PBLUAengine.run_script(script, "event_touch");
static class open_form extends OneArgFunction
{
        public LuaValue call (LuaValue formname)
        {           
            String tmpstr = (String ) CoerceLuaToJava.coerce(formname, java.lang.String.class );

            try
            {               
                PBscreen_game.hide_subscreen(PBscreen_game.MENU_SUBS); 
                PBscreen_game.show_subscreen ( PBscreen_game.FORM_SUBS);
                PBsubscreen_form.open_form ( new PBform_regular ( tmpstr ) );   
            }
            catch (Exception e)
            {
                Gdx.app.error("PBLUAlibrary.open_form", e.getMessage());
            }

            return valueOf ( 0 );
        }
    }
它基本上将lua参数转换为string,创建一个新的from并传入string参数

库函数的声明如下所示:

public LuaValue call( LuaValue modname, LuaValue env )
    {
        LuaValue library = tableOf();
        library.set( "open_form", new open_form() );
        library.set( "open_system_form", new open_system_form() );
        env.set( "pb", library );
        return library;
    }
这可能是我在整个系统中看到的唯一“表格”。这通常用于链接正确的类和正确的函数名

有人有主意吗

大多数人说这与表和数组索引问题有关

它与表和数组索引相关。如果您尝试索引一个对象,而该对象为
nil
,则会出现以下错误:

我根本不使用表[…]以下是lua脚本:

pb.open_form

pb
正在编制索引。可能是
nil

我似乎通过添加一个包含库的require行解决了这个问题。因此,新的脚本是:

String script = new String (
            "require 'com.lariennalibrary.pixelboard.library.PBLUAlibrary'"
            +  "function event_touch (  )"  
            + "   pb.open_form ('view_monster');"
            + "   print ('I ran the next button lua script');"
            + "end");
它要求包含我的库类,它将添加所有的“pb.*”函数。我可能是错误地删除了这一行,或者在没有它的情况下设法让它正常工作。因为所有脚本都需要这个库,所以默认情况下,我可能会在尝试运行每个脚本之前附加它


再次感谢

最后一次
调用
函数在哪里被调用,以将
pb
全局设置为lua状态?您在第一个代码段中显示的是
run\u script
函数吗?第二个论点是什么?您应该将对象设置到库或函数中吗?(我应该提到,我根本不懂java或luaj。)