2013-05-15 175 views
1

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

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

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 

我已经加入SWT库的Windows版本,但没有有所作为。我需要Mac库来继续开发。我怎样才能解决这个问题?

+0

从这个错误日志,我明白,你不必在你的java路径必要的罐子?你的Windows环境中的java路径在哪里?尝试将必要的jar复制到您的Windows路径或尝试将它们添加到您的构建路径。 – cgon

+0

您是否在Windows中设置了CLASSPATH?如果你设置它可能你没有添加你的jar文件到类路径。它已经说:“无法加载SWT库。” java库之间没有区别。每个库都可以在mac,linux和windows上运行。因为他们正在使用JVM。 – kodmanyagha

+0

@kodmanyagha错误,SWT依赖于平台,因为它使用OS本机代码。您必须提供正确版本的库。 – Baz

回答

5

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

如果您正在为Windows部署,则必须将Windows的swt jar(32位或64位,取决于系统)捆绑在一起。

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

Create cross platform Java SWT Application

+0

有没有办法添加这两个库,但然后动态地告诉它不加载基于操作系统的一个? –

+0

@JamesHarpe这正是我所链接的答案中发生的事情。 – Baz

相关问题