2017-11-20 39 views
1

내 웹 응용 프로그램의 서블릿에서 호출하는 클래스이다.JNI dll 파일이 tomcat 외부에서 올바르게 실행됩니다. 하지만 바람둥이에서 실행되지 않는다. 심지어 Eclipse와 같이 ide를 사용하지 않고 dll 파일을 tomcat/bin에 넣은 후에도

public class Cpro 
{ 
    public native int id(); 
    public int unique() 
    { 
     int a=new Cpro().id(); 
     return a; 
    } 
    static{ 

     System.load("Cpro.dll"); 

    } 
} 
+0

이 작동하는 응용 프로그램에서 당신이 System.load() javadoc에 따라 (예를 들어) 임시 디렉토리에 저장하고 절대 파일 경로를로드 할 수 있습니다 시작 하지만 난 답을 얻을 수 없습니다. java.lang.NoClassDefFoundError 오류 : Cpro 클래스를 초기화 할 수 없습니다. \t AddStudent.doPost (AddStudent.java:41) \t javax.servlet.http.HttpServlet.service HttpServlet.java : 648) \t javax.servlet.http.HttpServlet.service (HttpServlet.java:729) \t org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:52) – siddh

답변

0

응용 프로그램 리소스에 네이티브 라이브러리를 넣을 수 있습니다. 예를 들어

Loads the native library specified by the filename argument. The filename argument must be an absolute path name.

: 내가 바람둥이를 사용하지 않고 일반적으로 사용하는 경우

InputStream dllResourceStream = null; 
try { 
    ClassLoader cl = MyClass.class.getClassLoader(); 
    // obtain dll resource stream 
    dllResourceStream = cl.getResourceAsStream("path/to/dll/resource"); 
    File tmpFile = File.createTempFile("my_dll_name", ".dll"); 
    // store dll to temp dirictory 
    Files.copy(dllResourceStream, tmpFile.toPath(), StandardCopyOption.REPLACE_EXISTING); 
    // load dll via absolute file path 
    System.load(tmpFile.getAbsolutePath()); 
} catch(AccessDeniedException e) { 
    throw new IOException("Unable to install twain libraries", e); 
} finally { 
    if(dllResourceStream != null) resourceStream.close(); 
} 
+0

reply @ sergey에 감사드립니다. 하지만 내 문제를 해결, 문제는 jvm 32 비트 및 dll 64 파일 비트 인한 인해 불일치 – siddh