jpod库不在eclipse之外工作

时间:2014-05-19 07:50:24

标签: java eclipse java-native-interface jna freetype

如果我从eclipse运行项目 - 没关系。如果我运行project作为runnable jar抛出异常:

.Exception in thread "main" java.lang.ExceptionInInitializerError
        at de.intarsys.pdf.platform.cwt.font.freetype.FreetypeFontFactory.getLib
rary(Unknown Source)
        at de.intarsys.pdf.platform.cwt.font.freetype.FreetypeFontFactory.create
PlatformFont(Unknown Source)
        at de.intarsys.pdf.platform.cwt.rendering.CSPlatformDevice.textSetFont(U
nknown Source)
        at de.intarsys.pdf.content.CSDeviceBasedInterpreter.render_Tf(Unknown So
urce)
        at de.intarsys.pdf.content.CSInterpreter.process(Unknown Source)
        at de.intarsys.pdf.content.CSInterpreter.process(Unknown Source)
        at de.intarsys.pdf.content.CSDeviceBasedInterpreter.process(Unknown Sour
ce)
        at RenderDoc.renderPage(RenderDoc.java:75)
        at RenderDoc.renderPages(RenderDoc.java:97)
        at RenderDoc.run(RenderDoc.java:139)
        at RenderDoc.main(RenderDoc.java:48)
Caused by: java.lang.NullPointerException: no native interface available
        at de.intarsys.nativec.api.NativeInterface.set(Unknown Source)
        at de.intarsys.nativec.api.NativeInterface.get(Unknown Source)
        at de.intarsys.cwt.freetype.nativec._FTNI.init(Unknown Source)
        at de.intarsys.cwt.freetype.nativec._FTNI.<init>(Unknown Source)
        at de.intarsys.cwt.freetype.Freetype.<clinit>(Unknown Source)
        ... 11 more

我的系统windows7 64位,java 8 64位。我觉得问题,那个freetype.dll在eclipse之外没见过。我在jar(jpod依赖项)中找到了它。我如何在包装罐中正确包含这个dll,以及为什么它可以在eclipse中运行?

3 个答案:

答案 0 :(得分:1)

这个问题来自五月,但万一有人还有这个问题...... Freetype dll会自动从jar文件中提取到temp文件夹中并从那里加载。但是你得到的消息意味着无法初始化JNA桥。这是你的类路径的一个问题。您需要在类路径中使用jna.jar和其他jpod依赖项。

答案 1 :(得分:0)

如果在a predefined set of locations中找到共享库,JNA可以自动提取它们。

在Eclipse下运行时,java.classpath的值很可能不同于独立运行(在启动时打印值以查看)。您需要确保您的类路径在两种情况下都是等效的,并且共享库包含在JNA可以访问并最终使用的路径下的最终部署中(如果JNA不能将共享库包含在jar中没有用)将其提取到系统可以加载的位置。

答案 2 :(得分:0)

我遇到了同样的问题,即无法在Windows系统上加载本机库。

原因:

我使用了WebSphere Java 8 Runtime,它无法正确提取本机库。

解决方案:

使用官方Oracle JRE 8。