代码改变世界

JNI:class xxx could not be found

2006-05-10 22:28  晓风残月  阅读(1105)  评论(1编辑  收藏  举报
由于毕业设计的需要,选用的是J2EE来实现,主要负责的“压缩算法”部门问题就黑大了,又对于我这个菜鸟级别的Java GreenHand来说,更是雪上加霜^§§^

终于压缩算法是完成,用C实现(lzo,完善以后偶将post到园里面的请大家执教),JNI调用,今天终于开始研究JNI了,终于还是碰了一大钉子:

一点java经验都没有,就google了一番,选择一篇非常经典,收录于Sun中文社区的:例解 VC++ 6.0 实现 JNI也算是权威的吧。

按着陈健明老师的guidance,对于JNI的实现机制基本是明朗了。但是,当正常生成jWinMsgBox.class,然后使用javah -jni edu.netcom.jni.WinMsgBox 准备生成header的时候总是Error:

由于这里使用了包,因此第一种情况:javah WinMsgBox显然是不会成功的(其中-jni是可省的),然而为什么
javah -jni edu.netcom.jni.WinMsgBox也不会成功呢?陈健明老师的原文中就是这样的。
实在不行,那偶就加上完整路径吧:

非常抱歉,还是not found!这下可急了,看看javah命令的说明吧:
哦,看到了,好像-classpath是个解决方案:


哈哈,Good!edu_netcom_jni_WinMsgBox.h 终于出现啦。
原来是javah找不到class啊。回想下DOS路径符,其实,既然是当然目录,直接用  .  (小角句点就可以啦):



本来是同一目录下,应该是不需要指定的路径的,而且为什么javac没有指定路径确可以编译成功呢?
这个疑问再研究了,继续奋斗^_^!


PS:Java新手,第一不经传的问题,竟然让我花了这么的时间,大家见笑啦。由于javablogs还没有给偶“通行证”只好先post上来了^_^

Modified at 2006年5月20日18:30:55
今天看一个同学的CLASSPATH:
D:\j2sdk1.4.2_11\lib\tools.jar;E:\Dev Tools\Db server\MS Sql2000 for JDBC\lib\msbase.jar;E:\Dev Tools\Db server\MS Sql2000 for JDBC\lib\mssqlserver.jar;E:\Dev Tools\Db server\MS Sql2000 for JDBC\lib\msutil.jar;.

注意到其结尾有一个".",代表当前路径,原来还是可以直接这样加的啊,回来试试了一下,嘿嘿确实可以,使用javah对同目录下的.java就不需要使用 /classpath 制定路径了