Java выдает исключение Null при вызове через JNI, но работает при вызове из программы Java

Я использую JNI для вызова методов Java из библиотеки .jar из внешней системы. Моя проблема в том, что все работает нормально, когда я пишу простую программу Java, которая использует библиотеку, но когда я выполняю тот же код через JNI, библиотека выдает исключение Null при разборе Integer из String. Я уверен, что в моем коде JNI нет проблем, потому что у меня есть более новая версия библиотеки с тем же интерфейсом, которая отлично работает через JNI. Но, к сожалению, мне приходится использовать более старую версию из-за проблем совместимости с внешней системой.

Я думаю, что проблема в том, как jvm.dll создает виртуальную машину - вероятно, мне не хватает какого-то аргумента, который я должен передать jvm.dll при создании виртуальной машины. Кто-нибудь знает, где может быть проблема?

Я не могу опубликовать свой код, но могу объяснить это на примере: - библиотека версии 1 содержит класс Router с конструктором Router(int i) - у меня нет кода для этого класса - библиотека версии 2 содержит тот же класс с таким же конструктор - когда я пишу простую программу

import java.lang.reflect.*;

public class Basic
{
    public static void main(String[] args)
    {
        Router = new Router(10); 
    }
}

он работает с обеими библиотеками.

Когда я запускаю тот же код с более новой библиотекой 2 через JNI, он тоже работает. Но когда я запускаю код через JNI с библиотекой 1, он падает из-за следующего внутреннего исключения

    Error message: System.Exception: JAVA Exception: java.lang.NullPointerException
at com.coda.core.types.TypeNumber.parseNumber(TypeNumber.java:403)
at com.coda.core.types.TypeInteger.parse(TypeInteger.java:123)
at com.coda.core.types.TypeInteger.parse(TypeInteger.java:137)
at com.coda.core.Options.setOption(Options.java:138)
at com.coda.core.Options.set(Options.java:85)
at com.coda.core.configuration.ConfigurationLoader.getConfiguration(ConfigurationLoader.java:144)
at com.coda.xml.Configuration.init(Configuration.java:453)
at com.coda.xml.Configuration.init(Configuration.java:370)
at com.coda.xml.router.AppServer.<init>(AppServer.java:250)
at com.coda.xml.router.Router.<init>(Router.java:122)

person user2050708    schedule 07.02.2013    source источник
comment
только код может помочь   -  person TheWhiteRabbit    schedule 07.02.2013
comment
Покажите нам свой нативный код   -  person Aniket Inge    schedule 07.02.2013
comment
Какой код не работает? И что говорит внутреннее исключение? О, и jvm.dll (вероятно) не сломан.   -  person Jean Hominal    schedule 07.02.2013
comment
Бьюсь об заклад, это проблема компиляции кода C, а не кода Java.   -  person Aniket Inge    schedule 07.02.2013
comment
Извините, я забыл упомянуть одну важную вещь - я использую JNI из .NET так же, как это делает jni4net.   -  person user2050708    schedule 07.02.2013
comment
Я предполагаю, что новая библиотека выполняет нулевую проверку параметров, а старая - нет? Ах, не ждите. Неважно ...   -  person Fildor    schedule 07.02.2013
comment
Я попробую написать весь код C# на C, а там посмотрим.   -  person user2050708    schedule 07.02.2013
comment
Филдор - это не проблема. Старая библиотека отлично работает при использовании из простой java-программы с теми же аргументами.   -  person user2050708    schedule 07.02.2013
comment
Он отлично работает при запуске через JNI из С++. В моем коде .NET должна быть какая-то проблема. Я пробую все в 64-битном режиме   -  person user2050708    schedule 07.02.2013
comment
Я подготовил максимально простую обертку .NET JNI, и она тоже работает, так что теперь ищу отличия. Вероятно, проблема в рабочем каталоге всего приложения.   -  person user2050708    schedule 10.02.2013


Ответы (1)


Я решил проблему. У меня действительно была ошибка в параметрах для JVM. Для более старой библиотеки требуется другая библиотека jar, о которой я не знал. Итак, я добавил библиотеку в путь к классу, и она отлично работает. Действительно глупое исключение, в котором ничего не говорится, заставило меня неправильно искать проблему.

Спасибо всем за комментарии

person user2050708    schedule 10.02.2013