我有一个最简单的SWT程序(它甚至还没有显示“hello world”):
package com.samples.swt.first;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class Main {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
当我在Mac OSX上从Eclipse Helios运行此代码时,我得到以下错误:
***警告:由于Cocoa的限制,显示必须在主线程上创建。
Exception in thread "main" org.eclipse.swt.SWTException: Invalid thread access at org.eclipse.swt.SWT.error(SWT.java:4282) at org.eclipse.swt.SWT.error(SWT.java:4197) at org.eclipse.swt.SWT.error(SWT.java:4168) at org.eclipse.swt.widgets.Display.error(Display.java:1065) at org.eclipse.swt.widgets.Display.createDisplay(Display.java:822) at org.eclipse.swt.widgets.Display.create(Display.java:805) at org.eclipse.swt.graphics.Device.(Device.java:130) at org.eclipse.swt.widgets.Display.(Display.java:696) at org.eclipse.swt.widgets.Display.(Display.java:687) at com.samples.swt.first.Main.main(Main.java:8)
据我所知,我正在正确地执行所有步骤。为什么会出现这个错误?它说必须在主线程上创建Display
,而我发现它确实是在主线程上被创建的。然后它继续谈论Exception in thread "main"
...
编辑:
错误已经消失了,我从使用swt-debug.jar
转换为使用swt.jar
。如果有人知道为什么debug jar会导致此错误,我很想知道...