JSP 调用JNI 出错 java.lang.UnsatisfiedLinkError

lijianwei8215901 2009-06-02 05:22:36
我采用的是 通过VC++写低层程序生成DLL文件,然后通过JNI进行调用,
但是在Eclipse下 JAVA程序能够成功调用,但是通过JSP就不能调用,出现下面的错误:

org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
java.lang.UnsatisfiedLinkError: test
at cn.Test.test(Native Method)
at org.apache.jsp.AdminGUI.core.equipment.boxinspect_jsp._jspService(boxinspect_jsp.java:125)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)

2009-6-2 17:13:40 org.apache.catalina.core.StandardHostValve throwable
警告: Exception Processing ErrorPage[exceptionType=java.lang.Exception, location=/exception.jsp]
ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error

有高手知道这是怎么回事吗?如果说是DLL文件调用不正确的话,那为什么JAVA程序能够调用,JSP不能调用呢?
DLL文件所在的目录已经加入环境变量了,而且也把DLL文件放进system32里的。
环境:Eclipse VC++2006 附程序:
VC++:
javatest.cpp:
#include "cn_Test.h"
#include <iostream.h>
JNIEXPORT void JNICALL Java_cn_Test_test(JNIEnv * env, jobject obj)
{
cout<<"HELLO"<<endl;
}

cn_Test.h:
#include "jni.h"
#ifndef _Included_cn_Test
#define _Included_cn_Test
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: cn_Test
* Method: test
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_cn_Test_test
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif



JAVA:
javatest.java:

package cn;
public class Test {
public native void test();
public static void main(String[] args) {
// TODO 自动生成方法存根
System.loadLibrary("javatest");
Test tst =new Test();
tst.test();
}
}


1.jsp:

<%@page import="cn.Test"%>


<%
System.loadLibrary("javatest");
Test tst1 =new Test();
tst1.test();

%>
...全文
458 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
z547904614 2010-08-10
  • 打赏
  • 举报
回复
我也出现这个问题了,找了一天也没找到原因,帮顶
lijianwei8215901 2009-06-09
  • 打赏
  • 举报
回复
有没有高手知道啊
继续顶
lijianwei8215901 2009-06-07
  • 打赏
  • 举报
回复
顶上去 求救
hongqi162 2009-06-05
  • 打赏
  • 举报
回复
DLL放的位置的问题
lijianwei8215901 2009-06-05
  • 打赏
  • 举报
回复
在 JSP 里面的命令 ,前两个单独执行都是没有问题的,
System.loadLibrary("javatest");
Test tst1 =new Test();


出错是在
tst1.test(); 这段代码上




有没有人知道错误在哪啊,麻烦告诉下 ,谢谢 加分悬赏
lijianwei8215901 2009-06-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 billhepeng 的回复:]
UnsatisfiedLinkError是由于系统找不到JNI所需的某个DLL文件,可以将所有DLL放在系统path能找到的地方


javah 时使用完整包名.类名
[/Quote]

所有DLL?生成的DLL只有一个啊,系统PATH的地方我都放了,SYSTEM,SYSTEM32,还有我自己设定的环境变量目录里,都有


javah 是使用完整的包名,类名.
javah cn.Test

现在是单独执行JAVA程序是没问题的,执行JSP程序就出现问题。





lijianwei8215901 2009-06-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 hongqi162 的回复:]
DLL放的位置的问题
[/Quote]

那DLL 应该放置在哪呢?SYSTEM和SYSTEM32文件夹我都放了,而DLL存在的文件夹也设置到环境变量PATH里了。

如果是DLL问题的话,那为什么单独执行JAVA程序段是正常的可以运行的,运行JSP就不行了呢?

在 JSP 里面的命令 ,前两个单独执行都是没有问题的,
System.loadLibrary("javatest");
//执行没报错
Test tst1 =new Test();


出错是在
tst1.test(); 这段代码上
billhepeng 2009-06-04
  • 打赏
  • 举报
回复
UnsatisfiedLinkError是由于系统找不到JNI所需的某个DLL文件,可以将所有DLL放在系统path能找到的地方


javah 时使用完整包名.类名
lijianwei8215901 2009-06-04
  • 打赏
  • 举报
回复
有没有 高手知道怎么回事啊·急··
lijianwei8215901 2009-06-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 MT502 的回复:]
DLL加到环境变量没用的,你的Web容器看来也不会去system32下找dll。
你需要在Web容器的启动参数里显示指定dll的路径-Djava.library.path=你的DLL目录
[/Quote]

已经在 TOMCAT里的bin--catalina.bat 进入了 DLL目录了·,还是没解决
在set JAVA_OPTS=%JAVA_OPTS%
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file= "蔜ALINA_BASE%\conf\logging.properties "
后面添加-Djava.library.path= "E:/DLL "
lijianwei8215901 2009-06-04
  • 打赏
  • 举报
回复
没有找到dll文件

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

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

1.已经重新JAVAH了 还是不行
2.system或者system32都把DLL 放进去了 还不行
MT502 2009-06-03
  • 打赏
  • 举报
回复
DLL加到环境变量没用的,你的Web容器看来也不会去system32下找dll。
你需要在Web容器的启动参数里显示指定dll的路径-Djava.library.path=你的DLL目录
kokobox 2009-06-03
  • 打赏
  • 举报
回复
没有找到dll文件

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

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


lijianwei8215901 2009-06-03
  • 打赏
  • 举报
回复
有没有高手知道啊
acknowledge001 2009-06-02
  • 打赏
  • 举报
回复
高手呀...佩服
sciolist 2009-06-02
  • 打赏
  • 举报
回复
UnsatisfiedLinkError 未能满足的链接错误

没遇到过,帮顶

58,454

社区成员

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

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