当我使用双击时,我的java应用程序可以完美启动。我的道路:
PATH=...C:Program FilesJavajdk1.7.0_02bin;...
但是当我从 cmd 运行应用程序时:
C:Program FilesJavajdk1.7.0_02bin>java.exe -jar C:UserszagorulkindeDocume
ntsps_client_libbinWin32GUItest.jar
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: C:Window
sSystem32pc_client_lib.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1928)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1854)
at java.lang.Runtime.loadLibrary0(Runtime.java:845)
at java.lang.System.loadLibrary(System.java:1084)
at PC_client.lib.<clinit>(lib.java:10)
at settings.load(GUItest.java:342)
at GUItest.createAndShowGUI(GUItest.java:2681)
at GUItest.access$4100(GUItest.java:851)
at GUItest$22.run(GUItest.java:2728)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDo
main.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
ad.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
我正在尝试使用 x86 Java 版本运行:
C:Program Files (x86)Javajdk1.7.0_09bin>java.exe -jar C:Userszagorulkinde
Documentsps_client_libbinWin32GUItest.jar
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no PC_cli
ent_lib in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
at java.lang.Runtime.loadLibrary0(Runtime.java:845)
at java.lang.System.loadLibrary(System.java:1084)
at PC_client.lib.<clinit>(lib.java:10)
at settings.load(GUItest.java:342)
at GUItest.createAndShowGUI(GUItest.java:2681)
at GUItest.access$4100(GUItest.java:851)
at GUItest$22.run(GUItest.java:2728)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:682)
at java.awt.EventQueue$3.run(EventQueue.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDo
main.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:691)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
ad.java:244)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
java:163)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)
如果我尝试指定 DLL:
C:Program Files (x86)Javajdk1.7.0_09bin>java.exe -Djava.library.path="C:Use
rszagorulkindeDocumentsps_client_libbinWin32Pc_client_lib.dll" -jar C:Use
rszagorulkindeDocumentsps_client_libbinWin32GUItest.jar
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no PC_cli
ent_lib in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
at java.lang.Runtime.loadLibrary0(Runtime.java:845)
at java.lang.System.loadLibrary(System.java:1084)
at PC_client.lib.<clinit>(lib.java:10)
at settings.load(GUItest.java:342)
at GUItest.createAndShowGUI(GUItest.java:2681)
at GUItest.access$4100(GUItest.java:851)
at GUItest$22.run(GUItest.java:2728)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:682)
at java.awt.EventQueue$3.run(EventQueue.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDo
main.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:691)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
ad.java:244)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
java:163)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)
我做错了什么?请帮忙。
你必须把你的DLL放在JVM可以找到它的地方。通常,它应该位于应用程序文件夹下,但在运行 java 时,您应该指定选项-Djava.library.path=PATH TO YOUR DLL
。
1.) -Djava.library.path 指定了本机库所在的路径,它不指定库本身。(即 - 去掉文件名,更改为-Djava.library.path="C:Use
rszagorulkindeDocumentsps_client_libbinWin32"
)
2.) 区分大小写可能是一个问题 - 您在不同的地方将文件引用为"Pc_client_lib.dll"和"PC_client_lib"。确保在 loadLibrary
中使用的名称与实际.DLL文件名的大小写相同。
安全的方法是将DLL文件放入system32
文件夹中。