【问题标题】:How to launch java swing app which used precompled DLL from cmd?如何从 cmd 启动使用预编译 DLL 的 java swing 应用程序?
【发布时间】:2012-12-11 12:44:12
【问题描述】:

当我使用双击时,我的 java 应用程序完美启动。 我的路径:

PATH=...C:\Program Files\Java\jdk1.7.0_02\bin;...

但是当我从 cmd 运行应用程序时:

C:\Program Files\Java\jdk1.7.0_02\bin>java.exe -jar C:\Users\zagorulkinde\Docume
nts\ps_client_lib\bin\Win32\GUItest.jar
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: C:\Window
s\System32\pc_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)\Java\jdk1.7.0_09\bin>java.exe -jar C:\Users\zagorulkinde\
Documents\ps_client_lib\bin\Win32\GUItest.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)\Java\jdk1.7.0_09\bin>java.exe -Djava.library.path="C:\Use
rs\zagorulkinde\Documents\ps_client_lib\bin\Win32\Pc_client_lib.dll" -jar C:\Use
rs\zagorulkinde\Documents\ps_client_lib\bin\Win32\GUItest.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)

我做错了什么?请帮忙。

【问题讨论】:

    标签: java windows dll java-native-interface


    【解决方案1】:

    你必须把你的 DLL 放到 JVM 可以找到的地方。通常它应该位于您的应用程序文件夹下,但您应该在运行 java 时指定选项 -Djava.library.path=PATH TO YOUR DLL

    【讨论】:

    • 同样的错误:Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: C:\Users\ zagorulkinde\Documents\ps_client_lib\bin\Win32\Pc_client_lib.dll: Can't find dep endent libraries
    【解决方案2】:

    1.) -Djava.library.path 指定本地库所在的路径,它不指定库本身。 (即-取出文件名,将其更改为-Djava.library.path="C:\Use rs\zagorulkinde\Documents\ps_client_lib\bin\Win32\"

    2.) 区分大小写可能是个问题 - 您在不同的地方将文件称为“Pc_client_lib.dll”和“PC_client_lib”。确保您在 loadLibrary 中使用的名称与实际的 .DLL 文件名大小写相同。

    【讨论】:

    • 同样的错误:Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: C:\Users\ zagorulkinde\Documents\ps_client_lib\bin\Win32\Pc_client_lib.dll: Can't find dep endent libraries。在这个目录中存在Pc_client_lib.dll
    • @ZagorulkinDmitry - 这不是“相同的错误” - Can't find dependent libraries 表示 Java 现在找到了您指定的 .DLL,但 .DLL 本身具有在 PATH 或 java 上不可用的依赖项.库.路径。您需要找到 Pc_client_lib.dll 需要的其他 .DLL 文件并添加它们。
    • 我将所有DLLs 放入system32 文件夹中,并用Djava.library.path="C:\Widows\System32" 替换字符串我收到此错误:` java.lang.UnsatisfiedLinkError: no PC_clent_lib in java.library.path`
    • 那么你又回到了原来的问题。并添加了更多。 1.) 默认情况下,“C:\Windows\system32”应该在 PATH 上,所以不确定为什么要添加到 java.library 路径。 2.) “system32”以小写“s”开头。 3.) 它是“Pc_client_lib.dll”还是“PC_client_lib.dll”?
    • Pc_client_lib.dllPC_client_lib.dll 存在于 System32 中。同样的错误Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no PC_client_lib in java.library.path
    【解决方案3】:

    最安全的方法是把你的DLL文件放到system32文件夹中。

    【讨论】:

    • 在这种情况下:` C:\Program Files (x86)\Java\jdk1.7.0_09\bin>java.exe -jar C:\Users\zagorulkinde\Documents\ps_client_lib\bin\Win32 \GUItest.jar` 我的 system32 目录有这个库
    • 对不起,我不明白@ZagorulkinDmitry
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多