Я использую 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)
jvm.dll
(вероятно) не сломан. - person Jean Hominal   schedule 07.02.2013