Java 如何解决lua错误:“;尝试索引?(无价值)“;
关于这种错误已经有很多帖子了,大多数人说它与表和数组索引问题有关。但我根本不使用表,我只是试图调用我创建的库函数,我得到了这个错误。以下是从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
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。)