1

この下の問題を解決する解決策を教えてください ---

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)
4

1 に答える 1

5

SAP Java コネクタは、ネイティブ ライブラリを内部的に使用して SAP に接続します。このネイティブ ライブラリは sapjco3.jar ではなく、sapjco3.dll (Windows システムの場合) です。つまり、dll ファイルは、Java ライブラリ パスにあるフォルダにある必要があります。

後者は Java システム プロパティであり、呼び出すことでアプリケーションでアクセスできます。

System.getProperty("java.library.path")

次に、sapjco3.dll を、既にライブラリ パスにあるフォルダーの 1 つ (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\

winnt\system32 のようなシステム固有のフォルダに dll を配置すると、アプリケーションだけでなく他のアプリケーションにも影響を与える可能性があるため、sapjco3.dll を含むフォルダをアプリケーションのライブラリ パスに追加することをお勧めします。より柔軟な方法は、上記のようにコマンド ラインを介して指定することです。

于 2012-12-08T12:08:07.520 に答える