首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

MyEclipse+Tomcat环境下Java调用DLL有关问题

2013-09-11 
MyEclipse+Tomcat环境下Java调用DLL问题windows xp系统,在MyEclipse下做一个Java调用dll的程序在src下面编

MyEclipse+Tomcat环境下Java调用DLL问题
windows xp系统,在MyEclipse下做一个Java调用dll的程序 
在src下面编写javabean代码: 
 javacall.java 
public class javacall { 
static 

System.loadLibrary("calldll"); 


public native static int add(int i, int k); //在calldll.dll实现 

public static void main(String[] args) 

javacall jc = new javacall(); 
System.out.println(jc.add(3,4)); 


编译生成javacall.class文件,生成javacall.h文件 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
在VC6.0下生成dll文件,程序如下 
#include <jni.h> 
#include "javacall.h" 


JNIEXPORT jint JNICALL Java_javacall_add (JNIEnv *, jclass, jint a,jint b) 

return a*b; 


在命令行下直接运行java javacall结果正确 
如果这时候直接在MyEclipse下run application会报错: 
java.lang.UnsatisfiedLinkError: no calldll in java.library.path 
at java.lang.ClassLoader.loadLibrary(Unknown Source) 
at java.lang.Runtime.loadLibrary0(Unknown Source) 
at java.lang.System.loadLibrary(Unknown Source) 
at javacall.<clinit>(javacall.java:4) 
Exception in thread "main" 

这时在run-java application-arguments-VM arguments下面添加 
-Djava.library.path=E:\MyEclipse\workspace\jspcall\WebRoot\WEB-INF\classes 
这个路径是calldll.dll的存放路径,也是javacall.class所在路径 
然后运行成功,得到想要的结果12 

最后我在WebRoot下面编写call.jsp文件 
  <%@ page contentType="text/html; charset=GBK" %>  
  <html>  
  <head>  
  <title>  
  Jsp调用DLL例子  
  </title>  
  </head>  
  <jsp:useBean id="JBean" scope="page" class="javacall" />  
  <body>  
  <h1>  
  <%=JBean.add(3,4)%>  
  </h1>  
  </body>  
  </html>  

配置到tomcat6.0下, 
工程结构大致为jspcall在C:\Tomcat 6.0\webapps 
call.jsp在C:\Tomcat 6.0\webapps\jspcall 
javacall.class跟calldll.dll都在 
C:\Tomcat 6.0\webapps\jspcall\WEB-INF\classes 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
然后输入http://localhost:8080/jspcall/call.jsp 
出现错误: 
HTTP Status 500 - 

-------------------------------------------- 

type Exception report 

message 

description The server encountered an internal error () that prevented it from fulfilling this request. 

exception 

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 8 in the jsp file: /call.jsp 
javacall cannot be resolved to a type 
5: Jsp调用DLL例子  
6: </title>  
7: </head>  
8: <jsp:useBean id="JBean" scope="page" class="javacall" />  
9: <body>  
10: <h1>  
11: <%=JBean.add(3,4)%>  


An error occurred at line: 8 in the jsp file: /call.jsp 
javacall cannot be resolved to a type 
5: Jsp调用DLL例子  
6: </title>  
7: </head>  
8: <jsp:useBean id="JBean" scope="page" class="javacall" />  
9: <body>  
10: <h1>  
11: <%=JBean.add(3,4)%>  


An error occurred at line: 8 in the jsp file: /call.jsp 
javacall cannot be resolved to a type 
5: Jsp调用DLL例子  
6: </title>  
7: </head>  
8: <jsp:useBean id="JBean" scope="page" class="javacall" />  
9: <body>  
10: <h1>  
11: <%=JBean.add(3,4)%>  


Stacktrace: 
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92) 
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330) 
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:423) 
org.apache.jasper.compiler.Compiler.compile(Compiler.java:308) 
org.apache.jasper.compiler.Compiler.compile(Compiler.java:286) 
org.apache.jasper.compiler.Compiler.compile(Compiler.java:273) 
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
有人说: 
windows下在catalina.bat里 
set JAVA_OPTS=%JAVA_OPTS% 
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 
-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties" 
"-Djava.library.path=/"$你的dll的位置" 

不知道是不是版本的问题,我这里tomcat6.0下没有catalina.bat 
但是在tomcat的config(Apache Tomcat Properties)-java-java options 
下有 
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 
-Djava.util.logging.config.file=C:\Tomcat 6.0\conf\logging.properties 
然后我又添加了 
-Djava.library.path=C:\Tomcat 6.0\webapps\jspcall\WEB-INF\classes 
错误依然 

这个问题困扰我三天了,下午找一个朋友也没能解决 
对这个了解的牛人帮忙调试一下,不胜感激 


[解决办法]
如果要自定义DLL文件路径,例如将dll文件存放在E:\DLL那么编辑tomcat-bin--catalina.bat
在set JAVA_OPTS=%JAVA_OPTS%
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"
后面添加-Djava.library.path="E:/DLL"
我的异常网推荐解决方案:The server encountered an internal error () that prevented it from fulfilling this request.,http://www.myexception.cn/java-web/317.html
我的异常网推荐解决方案:org.apache.jasper.JasperException: Unable to compile class,http://www.myexception.cn/j2ee/2308.html

热点排行