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系统。

解决方案 »

  1.   

    应该是没有找到dll文件1.重新javah 全路径,包名.类名2.建议你把dll放到system或者system32目录下,再试一试。 
      

  2.   

    找到dll文件了。如果没有找到dll文件的话是报 UnsatisfiedLinkError异常!
      

  3.   

    有没有把这个dll文件放在system32目录下试一下?
      

  4.   

    LZ 提供的这个 class 里面,根本就没有一个“可以运行的 main 方法”。请你确认一下贴上来的代码是否真是你“正在调试的那段程序”。搞不好在你的 CLASSPATH 里面有另一个同名的类,你每次修改的是这段程序,而实际运行的是那段程序。
      

  5.   

    public class NoSuchMethodError
    extends IncompatibleClassChangeError
    当应用程序试图调用类(静态或实例)的指定方法,而该类已不再具有该方法的定义时,抛出该异常。 通常由编译器捕获该错误;仅当类定义发生不相容的更改时,在运行时才会发生该错误。 
      

  6.   

    可能是编译环境的问题,我这边用vs2005生成popo.dll放到system32下没有问题
    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"); 
      

  7.   


    JNI我太熟悉了。楼主的问题与JNI无关。
    是由于JAVA中的main()写错了。你将main()改成:
    public static void main(String[] args)
    {..}
    就行了
      

  8.   

    把.cpp文件改成.c文件 以c方式重新编译成dll试试~~~