2014-11-03 2 views
0

Я пытаюсь получить простую функцию, работающую в LuaJava (добавление двух чисел). У меня очень мало опыта с Lua, и я нахожу это трудным, так как мне не удалось найти подробную документацию для LuaJava. В настоящее время я могу распечатать на консоли java от lua, но ничего кроме этого.LuaJava - незащищенная ошибка при вызове Lua API

Я попытался реализации несколько методов, но получить ту же ошибку каждый раз, когда:

PANIC: unprotected error in call to Lua API (attempt to call a nil value) 

Это код, я использую:

import org.keplerproject.luajava.LuaState; 
import org.keplerproject.luajava.LuaStateFactory; 

public class Hello { 
    public static void main(String[] args) { 
     LuaState l = LuaStateFactory.newLuaState(); 
     l.openLibs(); 
     l.LdoFile("main.lua"); 
     l.call(0, 0); 
     l.getGlobal("add"); 
     l.pushInteger(1); 
     l.pushInteger(1); 
     l.call(2, 1); 
     int result = l.toInteger(1); 
     l.pop(1); 
     System.out.println("1 + 1 = " + result); 
    } 
} 

И файл Lua:

function add(a, b) 
    return a + b 
end 

Моя IDE - затмение. Заранее благодарю за любую помощь.

ответ

0

Я собираюсь предположить, что проблема возникает на этой линии l.call(0, 0);.

l.LdoFile("main.lua");, скорее всего, не возвращает функцию в стек, которая должна быть вызвана. Это то, что делает функция lua C luaL_loadfile. luaL_dofile - макрос вокруг luaL_loadfile, который также выполняет возвращенную функцию куска.

Итак, после l.LdoFile("main.lua"); отделки Я считаю, что у вас ничего нет в стеке, и ваша функция add доступна для использования.

+0

Спасибо. Избавилась от этой линии, и теперь она работает. По какой-то причине мне пришлось менять вызовы l.pushInteger на l.pushNumber. Спасибо еще раз за помощь! – user3767203

Смежные вопросы