【问题标题】:Where does SWT write dll files on windows?SWT在windows上哪里写dll文件?
【发布时间】:2011-11-16 18:42:49
【问题描述】:

我在 Internet 上找不到 SWT 尝试写入 dll 文件的位置。我有一台 jar 无法运行的计算机,只是因为 SWT 无法编写 DLL。

更新 1

java.lang.reflect.InvocationTargetException
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                at java.lang.reflect.Method.invoke(Unknown Source)
                at com.sun.javaws.Launcher.executeApplication(Unknown Source)
                at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
                at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
                at com.sun.javaws.Launcher.run(Unknown Source)
                at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons:
                no swt-win32-3738 in java.library.path
                no swt-win32 in java.library.path
                Can't load library: \\ubz01fst\Students\User2010\Com\xxx\swt-win32-3738.dll
                Can't load library: \\ubz01fst\Students\User2010\Com\xxx\swt-win32.dll

                at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
                at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
                at org.eclipse.swt.internal.C.<clinit>(Unknown Source)
                at org.eclipse.swt.widgets.Display.<clinit>(Unknown Source)
                at install.Main.main(Main.java:162)

【问题讨论】:

  • SWT 不应该编写 DLL。
  • AAH 在您自己的构建环境中使用 eclipse...好吧,如果您仔细阅读了您提供给我的非常链接“运行构建命令(对于 UNIX 和 Linux 平台,sh build.sh,build.bat对于 Windows)。这将在 当前目录中创建适当的库文件。"
  • 不,等等:我有 2 台机器。在第一个 jar 工作正常,运行时在 c:\Users\myuser\.swt\win\x86 下创建文件 dll。第二次它给了我我在更新 1 中写的异常。
  • 你的 jar 文件清单中有 DLL 吗?通常在带有 jar 的 lib/ 中。
  • @hurtledown SWT 正在通过 JNI 调用 DLL。这是一个简单的本地路径问题。您的错误消息向您显示了预期的内容以及找不到它们的位置。解压缩 jar 并确保所有内容都包含在内。在单独的注释中,SWT 是与 Swing 相对的本机实现(最终以本机结束,但它是 Java 发行版的一部分)。它通常是列出的 ./lib/*DLLs 的路径问题。 '\\ubz01fst\Students\User2010\Com\xxx\swt-win32.dll' 是一个致命的赠品。

标签: java windows dll swt


【解决方案1】:

我自己找出答案。 从 SWT 3.3 开始,您不再需要包含本机 (DLL) 库,因为它们位于 jar 本身中,并且在调用 SWT 库后立即解包。 DLL 文件从 jar 中解压缩并放置在“System.getProperty("user.home")”下的“.swt”文件夹中。 在我的情况下,问题是 System.getProperty("user.home") 设置为 "\ubz01fst\Students\User2010\Com\xxx" 这是一个 UNC 路径并且不可写(这通常发生在公司或组织中电脑)。

我不知道为什么计算机中的 System.getProperty("user.home") 取自 Windows 的环境变量“HOMESHARE”

解决方案在于将 System.getProperty("user.home") 更改为可写路径,例如:

System.setProperty("user.home", System.getenv("USERPROFILE"));

在调用任何 SWT 代码之前。

【讨论】:

  • 谢谢,这个技巧真的很有帮助!
  • 我在 SWT 4.3 中尝试过这种方法。奇怪的是,它只适用于一些解包的 dll。例如,Swt-awt-win32-4427.dll 正在写入我设置的新位置,但奇怪的是,swt-win32-4427.dll 仍然在 user.home 目录中解压缩(如果可能的话)。如果 user.home 不可用,我会收到“无法加载 SWT 库”错误。
  • 我通过将所需的 dll 手动放置在已知位置并将 swt.library.path 属性设置为该位置来解决了这个问题。 System.setProperty("swt.library.path", "C:\\Temp\\");
【解决方案2】:

好的,我找到了解决方案。问题是关于 dll 的生成。我使用的是 3.7m5 版本,我下载了以前的版本(3.7)并且应用程序运行正常。

问候。

【讨论】:

    猜你喜欢
    • 2014-09-04
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2011-05-15
    • 2016-12-10
    • 2012-12-28
    • 1970-01-01
    • 2011-05-26
    相关资源
    最近更新 更多