我正在尝试让hello world SWT应用程序运行起来:
public static void main(String args[]) throws IOException{
Display display = new Display ();
Shell shell = new Shell(display);
shell.open ();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}
display.dispose ();
}但我一直收到以下异常。我的org.eclipse.swt.carbon的macosx版本正在与eclipse/maven一起使用。以前有没有人见过这个?
Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-carbon-3346 or swt-carbon in swt.library.path, java.library.path or the jar file
at org.eclipse.swt.internal.Library.loadLibrary(Library.java:219)
at org.eclipse.swt.internal.Library.loadLibrary(Library.java:151)
at org.eclipse.swt.internal.C.<clinit>(C.java:21)
at org.eclipse.swt.widgets.Display.createDisplay(Display.java:943)
at org.eclipse.swt.widgets.Display.create(Display.java:937)
at org.eclipse.swt.graphics.Device.<init>(Device.java:119)
at org.eclipse.swt.widgets.Display.<init>(Display.java:749)
at org.eclipse.swt.widgets.Display.<init>(Display.java:740)
at com.wuntee.aat.command.adb.LogCat.main(LogCat.java:30)发布于 2011-06-24 05:10:14
SWT是使用原生UI库实现的-在本例中是Mac Carbon库-并且需要一些JNI代码来将SWT调用编组到原生Carbon调用。加载JNI库与普通的类加载略有不同(动态库必须首先使用System#loadLibrary加载)。
首先,如果您使用的是64位机器,请确保将-d32参数传递给JRE。(即java -d32 MyTestClass)。Carbon SWT库仅为32位,不能在64位运行时加载。
默认情况下,SWT尝试从类路径中的JAR文件加载.jnilib动态库-库libswt-carbon-3346.jnilib应该在org.eclipse.swt.carbon.macosx... JAR中。SWT将尝试将这个jnilib从您的JAR解压缩到一个临时位置并加载它。
如果由于某种原因(例如,java.io.tmpdir不可写)而无法执行此操作,则此操作将失败。要解决此问题,您应该从org.eclipse.swt.carbon.macosx JAR中提取libswt-carbon-3346.jnilib,并遵循异常提供的说明。(例如,将swt.library.path设置为该jnilib的位置。)
与您的实际问题无关:您使用的是SWT 3.3。从那时起,已经做了很多改变,包括(可能更可取的) Cocoa支持。在最新的Eclipse中升级到最新的SWT库可能会非常有帮助。
https://stackoverflow.com/questions/6460274
复制相似问题