我有一个基于网络的j2ee应用程序。有没有办法在其中使用.dll文件。
答案 0 :(得分:1)
是的,您可以像使用普通Java应用程序一样使用JNI / System#loadLibrary()
。您只需要意识到这在服务器端运行,不在客户端。如果您打算在客户端运行此操作,那么您需要以applet或webstart application的方式提供服务。
答案 1 :(得分:1)
首先,您的应用程序服务器必须能够从其应用程序类加载器加载本机库,以便System#loadLibrary工作;换句话说,它必须实现ClassLoader#findLibrary。否则,您必须使用System#load并以某种方式知道dll的绝对路径。
其次,将本机库放在J2EE应用程序中会影响重新启动应用程序的能力,因为JNI限制了多个类加载器加载相同本机库的能力。如果在尝试重新启动应用程序之前没有对应用程序的第一个实例中的应用程序类加载器进行垃圾回收(由于泄漏或因为GC不可预测),那么当应用程序的第二个实例未能成功时,它可能无法正常工作加载本机库。出于这个原因,我建议将本机库和使用它们的类放在服务器范围的类加载器中,或至少保证永远不会重新加载的类。
答案 2 :(得分:1)
您需要的是Java Native Interface。
一篇非常简单的文章指导您完成它是JNI Basics - 1。 更深入的“文章”(或更好的书)是JavaTM Native Interface Programmer的指南和规范。 另一个很好的教程可用 来自IBM developerworks:使用JNI进行Java编程(您必须注册,但它是免费且值得的)。