【问题标题】:SWT: Running an application developed on OSX in WindowsSWT:在 Windows 中运行在 OSX 上开发的应用程序
【发布时间】:2013-05-15 14:33:53
【问题描述】:

我有一个在 OSX 上开发的 SWT 应用程序,因此它包含 Mac 版本的 SWT 库。

现在我需要在 Windows 机器上运行这个应用程序。我将应用程序导出到 .jar 文件,但是当我尝试在 Windows 中执行 jar 时,我得到:

Exception in thread "main" 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 org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:58)
Caused by: java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons:

    no swt-cocoa-4236 in java.library.path
    no swt-cocoa in java.library.path
    Can't load library: \\psf\Home\.swt\lib\win32\x86\swt-cocoa-4236.dll
    Can't load library: \\psf\Home\.swt\lib\win32\x86\swt-cocoa.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 display.StoragePickupDisplay.open(StoragePickupDisplay.java:70)
    at display.StoragePickupDisplay.main(StoragePickupDisplay.java:58)
    ... 5 more

我已经添加了 Windows 版本的 SWT 库,但这并没有什么不同。我需要 Mac 库在那里继续开发。我该如何解决这个问题?

【问题讨论】:

  • 从这个错误日志中我了解到您的 java 路径中没有必要的 jar 包?您的 Windows 环境中的 java 路径在哪里?尝试将必要的 jar 复制到您的 windows 路径或尝试将它们添加到您的构建路径。
  • 你在windows中设置了CLASSPATH吗?如果你设置了它,你可能没有将你的 jar 文件添加到类路径中。它已经在说:“无法加载 SWT 库。” java库之间没有区别。每个库都适用于 mac、linux 和 windows。因为他们正在开发 JVM。
  • @kodmanyagha 错误,SWT 依赖于平台,因为它使用操作系统本机代码。您必须提供正确版本的库。

标签: java windows macos swt cross-platform


【解决方案1】:

您必须将正确的SWT.jar 添加到类路径中。你可以下载它们here

如果您要为 Windows 部署,则必须为 Windows 捆绑 swt jar(32 位或 64 位,具体取决于系统)。

如果您想创建一个在所有平台上运行的应用程序,请查看这篇文章:

Create cross platform Java SWT Application

【讨论】:

  • 有没有办法同时添加这两个库,然后根据操作系统动态告诉它不要加载其中一个?
  • @JamesHarpe 这正是我链接到的答案中发生的事情。
猜你喜欢
  • 2013-09-07
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 2012-10-08
  • 1970-01-01
  • 2016-04-08
相关资源
最近更新 更多