通过Java连接SAP时发生异常

通过Java连接SAP时发生异常,java,sap,Java,Sap,您能告诉我解决以下问题的方法吗--- 尽管sapjco3.jar在我的库路径中,但我在尝试通过Java类连接SAP相关文件时遇到此异常。我在Windows XP和Windows Server 98中尝试了此操作 java.lang.UnsatisfiedLinkError: no sapjco3 in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682) at java.lang.Runtime

您能告诉我解决以下问题的方法吗---

尽管sapjco3.jar在我的库路径中,但我在尝试通过Java类连接SAP相关文件时遇到此异常。我在Windows XP和Windows Server 98中尝试了此操作

java.lang.UnsatisfiedLinkError: no sapjco3 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at com.sap.conn.jco.rt.DefaultJCoRuntime.loadLibrary(DefaultJCoRuntime.java:441)
at com.sap.conn.jco.rt.DefaultJCoRuntime.registerNativeMethods(DefaultJCoRuntime.java:307)
at com.sap.conn.jco.rt.JCoRuntime.registerNatives(JCoRuntime.java:987)
at com.sap.conn.rfc.driver.CpicDriver.<clinit>(CpicDriver.java:948)
at com.sap.conn.rfc.engine.DefaultRfcRuntime.getVersion(DefaultRfcRuntime.java:43)
at com.sap.conn.rfc.api.RfcApi.RfcGetVersion(RfcApi.java:259)
at com.sap.conn.jco.rt.MiddlewareJavaRfc.<clinit>(MiddlewareJavaRfc.java:200)
at com.sap.conn.jco.rt.DefaultJCoRuntime.initialize(DefaultJCoRuntime.java:73)
at com.sap.conn.jco.rt.JCoRuntimeFactory.<clinit>(JCoRuntimeFactory.java:23)
at com.sap.conn.jco.rt.RuntimeEnvironment.<init>(RuntimeEnvironment.java:40)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at com.sap.conn.jco.ext.Environment.getInstance(Environment.java:121)
at com.sap.conn.jco.ext.Environment.registerDestinationDataProvider(Environment.java:216)
at de.vogella.sap.rfc.core.connection.Connection.<init>(Connection.java:37)
at struct.actions.GestReservaSap.<clinit>(GestReservaSap.java:63)
at eu.sony.com.moduloreservas.ReservasMainClass.main(ReservasMainClass.java:259)
java.lang.UnsatifiedLinkError:java.library.path中没有sapjco3
位于java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
位于java.lang.Runtime.loadLibrary0(Runtime.java:823)
位于java.lang.System.loadLibrary(System.java:1030)
位于com.sap.conn.jco.rt.DefaultJCoRuntime.loadLibrary(DefaultJCoRuntime.java:441)
在com.sap.conn.jco.rt.DefaultJCoRuntime.registerNativeMethods(DefaultJCoRuntime.java:307)
位于com.sap.conn.jco.rt.JCoRuntime.registerNatives(JCoRuntime.java:987)
位于com.sap.conn.rfc.driver.CpicDriver.(CpicDriver.java:948)
位于com.sap.conn.rfc.engine.DefaultRfcRuntime.getVersion(DefaultRfcRuntime.java:43)
位于com.sap.conn.rfc.api.RfcApi.RfcGetVersion(RfcApi.java:259)
位于com.sap.conn.jco.rt.MiddlewareJavaRfc(MiddlewareJavaRfc.java:200)
位于com.sap.conn.jco.rt.DefaultJCoRuntime.initialize(DefaultJCoRuntime.java:73)
位于com.sap.conn.jco.rt.JCoRuntimeFactory。(JCoRuntimeFactory.java:23)
位于com.sap.conn.jco.rt.RuntimeEnvironment(RuntimeEnvironment.java:40)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:513)
位于java.lang.Class.newInstance0(Class.java:355)
位于java.lang.Class.newInstance(Class.java:308)
位于com.sap.conn.jco.ext.Environment.getInstance(Environment.java:121)
位于com.sap.conn.jco.ext.Environment.registerDestinationDataProvider(Environment.java:216)
位于de.vogella.sap.rfc.core.connection.connection.(connection.java:37)
位于struct.actions.GestReservaSap.(GestReservaSap.java:63)
在eu.sony.com.moduleoreservas.ReservasMainClass.main(ReservasMainClass.java:259)

SAP Java连接器在内部使用本机库连接到SAP。此本机库不是sapjco3.jar,而是sapjco3.dll(在Windows系统上)。也就是说,dll文件必须位于Java库路径中的文件夹中

后者是Java系统属性,您可以通过调用

System.getProperty("java.library.path")
然后,您可以将sapjco3.dll放入已在库路径中的一个文件夹中(在Windows上,例如C:\WINNT\system32),或者通过显式设置库路径将库路径设置为特定文件夹:

  • 在应用程序代码中,通过设置
    System.setProperty(“java.library.path”,“C:\path\to\folder\with\dll\”)
    在访问SAP JCo之前
  • 或者在使用命令行参数启动Java时
    -Djava.library.path=C:\path\to\folder\with\dll\

由于将dll放入特定于系统的文件夹(如winnt\system32)可能不仅会影响应用程序,还会影响其他应用程序,因此建议将包含sapjco3.dll的文件夹添加到应用程序的库路径中。更灵活的方法是通过如上所示的命令行指定它,这样就不需要硬编码。

SAP Java Connector内部使用本机库连接到SAP。此本机库不是sapjco3.jar,而是sapjco3.dll(在Windows系统上)。也就是说,dll文件必须位于Java库路径中的文件夹中

后者是Java系统属性,您可以通过调用

System.getProperty("java.library.path")
然后,您可以将sapjco3.dll放入已在库路径中的一个文件夹中(在Windows上,例如C:\WINNT\system32),或者通过显式设置库路径将库路径设置为特定文件夹:

  • 在应用程序代码中,通过设置
    System.setProperty(“java.library.path”,“C:\path\to\folder\with\dll\”)
    在访问SAP JCo之前
  • 或者在使用命令行参数启动Java时
    -Djava.library.path=C:\path\to\folder\with\dll\
由于将dll放入特定于系统的文件夹(如winnt\system32)可能不仅会影响应用程序,还会影响其他应用程序,因此建议将包含sapjco3.dll的文件夹添加到应用程序的库路径中。更灵活的方法是通过如上所示的命令行指定它,这样就不需要硬编码