java文件内容如下:
public class popo
{
static
{
System.loadLibrary("../debug/popo");
}
public native static void printInfo();
public static void main()
{
popo.printInfo();
}
}
用javac编译以后,用javah命令生成了popo.h头文件。
cpp文件内容如下:
#include "stdafx.h"
#include "..\java\popo.h"JNIEXPORT void JNICALL Java_popo_printInfo
(JNIEnv * env, jclass jcls)
{
printf("this is printInfo method");
}
生成popo.dll
运行以后提示NoSuchMethodError异常。请问这是怎么回事?Windows7系统。
public class popo
{
static
{
System.loadLibrary("../debug/popo");
}
public native static void printInfo();
public static void main()
{
popo.printInfo();
}
}
用javac编译以后,用javah命令生成了popo.h头文件。
cpp文件内容如下:
#include "stdafx.h"
#include "..\java\popo.h"JNIEXPORT void JNICALL Java_popo_printInfo
(JNIEnv * env, jclass jcls)
{
printf("this is printInfo method");
}
生成popo.dll
运行以后提示NoSuchMethodError异常。请问这是怎么回事?Windows7系统。
extends IncompatibleClassChangeError
当应用程序试图调用类(静态或实例)的指定方法,而该类已不再具有该方法的定义时,抛出该异常。 通常由编译器捕获该错误;仅当类定义发生不相容的更改时,在运行时才会发生该错误。
public class popo
{
static
{
System.loadLibrary("popo");
}
public native static void printInfo();
public static void main(String args[])
{
popo.printInfo();
}
} #include "popo.h"
#include <stdio.h>
#include <string.h>
JNIEXPORT void JNICALL Java_popo_printInfo
(JNIEnv * env, jclass jcls)
{
printf("this is printInfo method");
}
JNI我太熟悉了。楼主的问题与JNI无关。
是由于JAVA中的main()写错了。你将main()改成:
public static void main(String[] args)
{..}
就行了。