gpt4 book ai didi

java - 无法让 JMagick 工作

转载 作者:搜寻专家 更新时间:2023-11-01 01:42:35 26 4
gpt4 key购买 nike

我对 JMagick 库有奇怪的问题。我使用 Debian,所以我安装了 libjmagick6-java 和 libjmagick6-jni,这是我完成的步骤:

  • 我已经将 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 应用程序项目中,它就是不工作..

这是我的代码,它有效 - 所以必须正确安装 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();
}
}

这是 webapp 中的代码,它不工作:

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)

请告诉我一些解决此问题的想法。提前致谢!

最佳答案

我终于通过检查真实的 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

尽情享受吧! :-)

关于java - 无法让 JMagick 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27295015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com