日期:2014-05-20  浏览次数:20779 次

我在java程序调用dll成功,而在swt下调用dll失败,请部怎么回事?
报错内容如下:
Exception   in   thread   "main "   java.lang.UnsatisfiedLinkError:   no   DLLSample   in   java.library.path
at   java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
at   java.lang.Runtime.loadLibrary0(Runtime.java:822)
at   java.lang.System.loadLibrary(System.java:992)
at   shell.TestDll. <clinit> (TestDll.java:7)
at   shell.Math$1.widgetSelected(Math.java:33)
at   org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:90)
at   org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at   org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:928)
at   org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3348)
at   org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2968)
at   shell.Math.main(Math.java:45)
我的调用程序如下:
package   shell;


public   class   TestDll   {  
  static  
  {
    System.loadLibrary( "DLLSample ");//载入dll
  }
  public   native   static   int   DoubleValue(int   i);//函数声明  
}

------解决方案--------------------
用java.library.path指定你的DLL的位置。
-Djava.library.path=path_to_your_dll
------解决方案--------------------
最简单的是把SWT.JAR中的几个DLL解压缩出来放在 windows/system32 及windows/system 在windows中JAVA会从该2个目录中去加载一些库文件。如果不想那就用2楼的方法在Eclipse启动该程序的Arguments页中的VM arguments中指定那几个你解压缩出来的dll目录的文件夹路径,方法为-Djava.library.path=path_to_your_dll