JNI的问题,老是提示NoSuchMethodError异常!

SimerJoe 2009-11-23 03:41:26
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系统。
...全文
371 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
LIS561 2009-11-23
  • 打赏
  • 举报
回复
mark
problc 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jiangnaisong 的回复:]
引用楼主 simerjoe 的回复:
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系统。


JNI我太熟悉了。楼主的问题与JNI无关。
是由于JAVA中的main()写错了。你将main()改成:
public static void main(String[] args)
{..}
就行了。
[/Quote]
果然熟啊,眼神也好
godismydaughter 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jiangnaisong 的回复:]
引用楼主 simerjoe 的回复:
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系统。


JNI我太熟悉了。楼主的问题与JNI无关。
是由于JAVA中的main()写错了。你将main()改成:
public static void main(String[] args)
{..}
就行了。
[/Quote]同意
晴天1999 2009-11-23
  • 打赏
  • 举报
回复
新手哈!多多指教哟!
机智的呆呆 2009-11-23
  • 打赏
  • 举报
回复
把.cpp文件改成.c文件 以c方式重新编译成dll试试~~~
云上飞翔 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 simerjoe 的回复:]
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系统。
[/Quote]

JNI我太熟悉了。楼主的问题与JNI无关。
是由于JAVA中的main()写错了。你将main()改成:
public static void main(String[] args)
{..}
就行了
wangleileo 2009-11-23
  • 打赏
  • 举报
回复
可能是编译环境的问题,我这边用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");
}
realreachard 2009-11-23
  • 打赏
  • 举报
回复
没遇见过
  • 打赏
  • 举报
回复
也有可能是系统原因
saiche05 2009-11-23
  • 打赏
  • 举报
回复
可能是.dll版本问题
feixueli 2009-11-23
  • 打赏
  • 举报
回复
大型软件公司招聘CRM架构师
职位:CRM架构师 待遇:12K-15K
应聘条件:
CRM业务需求系统分析,提出技术研究及可行性报告,结合需求设计高扩展性、高性能、安全、稳定、可靠的CRM业务系统,可以通过配置实现业务需求的变化,跟踪并研究最新技术并应用于产品,指导研发工程师的产品开发和技术研究工作,促使研发团队整体技术水平提升。

1.计算机相关专业本科以上学历,5年以上JAVA开发经验,3年以上架构设计经验;

2.丰富的CRM相关企业管理软件架构设计经验,熟悉销售、客服等业务子系统;

3.精通运营型CRM、分析型CRM等常用CRM业务模型;

4.精通设计模式,熟悉SOA等常用软件架构思想,善于设计可重用组件和可定制化产品;

5. 精通STRUTS+SPRING+HIBERNATE开源架构,熟悉常用开源组件;

6. 良好的逻辑思维能力,精通业务抽象和数据模型设计;

7.知识面广,思路开阔,掌握业界最新动态 ;

8.具备创业般的工作激情,能承受巨大的工作压力,有超强的自我驱动能力,沟通交流能力好,团队合作意识佳;

9. 熟悉CTI相关技术,有CTI与CRM系统集成经验者优先;

10.有互联网相关领域信息化管理软件设计经验优先;
集团简介:
海辉软件: 是一家一流的全球IT外包服务提供商,为财富500客户提供高质、安全的IT服务。公司日本,美国,新加坡都设有分支机构。

简历接收邮箱:fiona.fei@easytojob.com
电话:84193423-25
13264280705

zl3450341 2009-11-23
  • 打赏
  • 举报
回复
public class NoSuchMethodError
extends IncompatibleClassChangeError
当应用程序试图调用类(静态或实例)的指定方法,而该类已不再具有该方法的定义时,抛出该异常。

通常由编译器捕获该错误;仅当类定义发生不相容的更改时,在运行时才会发生该错误。
maquan 2009-11-23
  • 打赏
  • 举报
回复
LZ 提供的这个 class 里面,根本就没有一个“可以运行的 main 方法”。

请你确认一下贴上来的代码是否真是你“正在调试的那段程序”。搞不好在你的 CLASSPATH 里面有另一个同名的类,你每次修改的是这段程序,而实际运行的是那段程序。
wifewifewife 2009-11-23
  • 打赏
  • 举报
回复
有没有把这个dll文件放在system32目录下试一下?
SimerJoe 2009-11-23
  • 打赏
  • 举报
回复
找到dll文件了。如果没有找到dll文件的话是报 UnsatisfiedLinkError异常!
majinlong7 2009-11-23
  • 打赏
  • 举报
回复
帮顶
wifewifewife 2009-11-23
  • 打赏
  • 举报
回复
应该是没有找到dll文件

1.重新javah 全路径,包名.类名

2.建议你把dll放到system或者system32目录下,再试一试。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧