2014-12-04 109 views
3

我有JMagick庫的奇怪問題。我使用Debian,所以我已經安裝了libjmagick6-Java和libjmagick6-JNI,這裏有步驟,我已經做了:不能得到JMagick工作

  • 我抄jmagick-6.6.9.jar/usr/share/java/$JAVA_HOME/jre/lib/ext/
  • 我已經設置/usr/lib/jni(其中是libJMagick.so)作爲本機庫位置在:
    • JRE系統庫(在eclipse)
    • jmagick-6.6.9.jar(在eclipse)

此外,我已經在簡單的Java項目中測試了JMagick並且它在其中工作,但是在第二個項目中運行在Tomcat 6中的Web應用程序中,它只是不起作用。

這是我的代碼WORKS - 所以jmagick必須安裝正確:

public class Main { 
    public static void main(String[] arg) { 
     MagickImage image = null; 
     ImageInfo imageInfo = null; 

     try { 
      imageInfo = new ImageInfo("/home/firzen/IMG_0120.JPG"); 
      image = new MagickImage(imageInfo); 
      System.out.println(image.getDimension().width); 
     } catch (MagickException e) { 
       System.out.println(e); 
     } 
     image.destroyImages(); 
    } 
} 

這裏是在Web應用程序是代碼不工作

public void init() {   
    ServletContext sc = getServletContext(); 
    cacheHandlers = (Map<String, CacheContext>) sc.getAttribute("handlers"); 
    Boolean applicationReady = (Boolean) sc.getAttribute("ready"); 
    isReady = cacheHandlers != null && Boolean.TRUE.equals(applicationReady); 

    System.out.println("zde"); 
    MagickImage image = null; 
    ImageInfo imageInfo = null; 

    try { 
     imageInfo = new ImageInfo("/home/firzen/IMG_0120.JPG"); 
     image = new MagickImage(imageInfo); 
     System.out.println(image.getDimension().width); 
    } catch (MagickException e) { 
      System.out.println(e); 
    } 
    image.destroyImages(); 
} 

最後這裏是例外拋出提到的代碼:

java.lang.UnsatisfiedLinkError: no JMagick 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 magick.Magick.<clinit>(Magick.java:18) 
    at cz.bach.mrimage.MrImageSrv.init(MrImageSrv.java:44) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:212) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173) 
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:809) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:563) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:554) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Unknown Source) 

請告訴我一些想法如何解決這個問題lem ..提前致謝!

回答

5

我終於通過檢查真正的java.library.path解決了這個問題:

System.out.println("java.library.path is: " + System.getProperty("java.library.path")); 

這給了我這個爛攤子:

java.library.path is: /opt/jdk1.7.0_45/jre/lib/i386/server:/opt/jdk1.7.0_45/jre/lib/i386:/opt/jdk1.7.0_45/jre/../lib/i386:/usr/lib/jvm/java-6-openjdk-i386/jre/lib/i386/client:/usr/lib/jvm/java-6-openjdk-i386/jre/lib/i386::/usr/java/packages/lib/i386:/lib:/usr/lib 

在最後你可以看到在/ usr/lib,所以我在/ usr/lib中創建了libJMagick.so鏈接:

ln -s /usr/lib/jni/libJMagick.so /usr/lib/libJMagick.so 

享受! :-)

+1

好計劃,沒有工作。我已經完成了5次以前的安裝,它會隨機停止檢測本地庫。 'libJMagick.so'絕對在'java.library.path'中,所以它是依賴關係,但是當它嘗試加載類時,我得到'UnsatisfiedLinkError'。 – coladict 2016-12-23 10:11:47