Суть проблемы.
После встраивания lua в java, у получившейся связки, отсутствует одна важная функция - отладочные сообщения. Они конечно не шибко и нужны если вы сразу пишите код без ошибок, но я не такой.
Выглядит подобное отсутствие примерно так, если запустить скрипт с ошибками то работа сразу завершается и ни ответа не привета. Фиг поймешь что не так.
Проблема решается следующим образом:
LuaState.LdoFile возвращает не 0 в случае проблем. И вот тут то и придется поработать. Надо пройтись по стеку lua интерпретатора и выкинуть в stdout все что там есть предварительно преобразовав это все в строки.
примерно так
int stackPtr = 1;
tmp = L.getLuaObject(stackPtr);
while(tmp.isNil() == false)
{
System.out.println(" ["+stackPtr+"] "+tmp.toString());
stackPtr += 1;
tmp = L.getLuaObject(stackPtr);
}
И ура! Есть отладочные сообщения в случае если чего не так.
Но... если вы вызовете(допустив ошибку и имени) метод прокидываемого на уровень скрипта, Java объекта, то опять вам скажут нечто невразумительное
Invalid method call. No such method
и все тут.. ни имени метода ни строки где это произошло.
Красиво побороть эту напасть у меня не вышло. Там видимо надо шибко изгаляться с userdata в которые преобразуются все жабские объекты высовываемые в скрипт. Я не смог нормально раступить как это сделать, не смотря на почти неделю гуглежки. Если кто решил проблему красиво - велакм!
Я поступил проще.
В LuaJavaAPI.java в методе objectIndex
есть строка вида
throw new LuaException("Invalid method call. No such method");
собсно гря она нам и нужна.
меняем ее на
throw new LuaException("Invalid method call. No such method '"+methodName+"'");
и получаем глоток свежего воздуха в виде осмысленной информации о том чегоже мы такого неправильно вызываем.
И да.. не забудьте пересобрать если подключаете к проекту готовый джарник.
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий