什么导致java.lang.IncompatibleClassChangeError错误?

262

我正在将一个Java库打包为JAR文件,在尝试调用其中的方法时,会抛出很多java.lang.IncompatibleClassChangeError错误,这些错误似乎是随机出现的。可能会出现哪些问题导致这个错误?


在我测试Apache FOP 1.0和Barcode4J的Eclipse项目中,随Barcode4J一起提供的附加库显然覆盖了FOP自带的库(其中一些版本号更高)。这是一个需要非常小心地将什么放入您的构建路径/类路径的情况。 - Wivani
21个回答

0

由于某种原因,使用JNI并在调用Call*Method()时传递jclass参数而非jobject时,也会抛出相同的异常。

这与Ogre Psalm33的答案类似。

void example(JNIEnv *env, jobject inJavaList) {
    jclass class_List = env->FindClass("java/util/List");

    jmethodID method_size = env->GetMethodID(class_List, "size", "()I");
    long size = env->CallIntMethod(class_List, method_size); // should be passing 'inJavaList' instead of 'class_List'

    std::cout << "LIST SIZE " << size << std::endl;
}

我知道回答这个问题已经晚了5年,但当搜索java.lang.IncompatibleClassChangeError时,这是最热门的搜索结果之一,所以我想记录一下这个特殊情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接