如何在我的Web应用程序中加载自定义dll文件?我尝试了以下方法,但失败了。
system32
文件夹中所有必需的dll,并尝试在Servlet
构造函数中加载其中一个System.loadLibrary
tomcat_home/shared/lib
和中复制了所需的dlltomcat_home/common/lib
WEB-INF/libWeb
应用程序中为了System.loadLibrary()
正常工作,该库(在Windows上为DLL)必须位于目录中PATH 或java.library.path
系统属性中列出的路径上的某个目录中(这样你就可以启动Java了java -Djava.library.path=/path/to/dir
)。
此外,对于loadLibrary()
,你可以指定库的基本名称,但.dll结尾不能带。因此,/path/to/something.dll
你只需使用System.loadLibrary("something")
。
你还需要查看所获得的确切信息UnsatisfiedLinkError
。如果显示类似以下内容:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no foo in java.library.path
那么它将无法在你的或中找到foo库(foo.dll
)。如果显示类似以下内容:PATHjava.library.path
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.example.program.ClassName.foo()V
则库本身有问题,因为Java无法将应用程序中的本机Java函数映射到其实际本机副本。
首先,我会在你的System.loadLibrary()
呼叫周围记录一些日志,以查看该呼叫是否正常执行。如果它引发异常或不在实际执行的代码路径中,那么你将始终得到UnsatisfiedLinkError
上面解释的后一种类型。
loadLibrary()
附带说明一下,大多数人使用本机方法将调用放入类中的静态初始化程序块中,以确保始终始终执行一次:
class Foo {
static {
System.loadLibrary('foo');
}
public Foo() {
}
}
在我将所有本机库链接到每个引用库并按照http://ninjacave.com/lwjglwitheclipse的说明操作之后,该错误仍然存在
请注意,这与此问题不同,因为它不处理链接,因为它不是询问如何通过CLI链接,而是询问Eclipse中的GUI。 我一直在尝试用LWJGL编写一个简单的程序。当我将该库添加到Eclipse(Windows 7 64位上的开普勒4.3.1)并编写程序时,它不会在使用LWJGL的东西下面显示红色波形条。然而,尝试运行它会产生以下堆栈跟踪: (是的,这是他们首先给出的示例,但我想运行它以确保所有内容都正确
问题内容: 请注意,这与该问题不同,因为它不处理链接,因为它不是在询问如何通过CLI进行链接,而是询问Eclipse中的GUI。 我一直在尝试使用LWJGL编写一个简单的程序。当我将库添加到Eclipse(在Windows 7 64bit上为Kepler 4.3.1)并编写程序时,在使用LWJGL的情况下,它不会显示红色弯曲。但是,尝试运行它会为我提供以下堆栈跟踪: (是的,这是他们首先给出的示例
--所以,编制没有问题。当我开始运行程序时,它显示如下异常 线程“main”java.lang.UnsatisfiedLinkError中的异常:java.library.path中的java.lang.ClassLoader.LoadLibrary(未知源)中的java.lang.Runtime.LoadLibrary0(未知源)中的java.lang.System.LoadLibrary(未知
问题内容: 我设法进入Linux机器尝试此答案中建议的HotKey库。 我已经编译了示例代码,现在运行该程序,并收到以下消息: 我知道如何在Windows中处理此问题(仅通过将DLL添加到PATH env var中),但是我不确定Linux。 我已经阅读了有关LD_LIBRARY_PATH和其他一些env var的内容,但是我可以使其正常工作。 有什么建议吗? 编辑 经过mmyers的支持,确定问
问题内容: 我正在尝试使用JMS访问MQ队列。我正在下面 我正在过去 在eclipse中运行程序时作为VM参数。在网上对此问题进行了很多讨论,但没有任何结论。有人解决了吗?TIA。 问题答案: 您可能在CLASSPATH,lib或EAR中都有一些较旧的MQ jar文件。 删除它们,就可以了。 您不应将MQ文件放在EAR或WEB-INF / lib文件夹中。它们应该在您的应用服务器的类路径中。