Mac OSX (Eclipse Helios)上的SWT线程访问无效



我有一个最简单的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();
    }
}

当我从Eclipse Helios在Mac OSX上运行这个时,我得到以下错误:

***警告:由于Cocoa限制,必须在主线程上创建显示。
线程"main"中的异常org.eclipse.swt.SWT.error(SWT.java:4282)的线程访问无效org.eclipse.swt.SWT.error (SWT.java: 4197)org.eclipse.swt.SWT.error (SWT.java: 4168)org.eclipse.swt.widgets.Display.error (Display.java: 1065)org.eclipse.swt.widgets.Display.createDisplay (Display.java: 822)org.eclipse.swt.widgets.Display.create (Display.java: 805)org.eclipse.swt.graphics.Device (Device.java: 130)org.eclipse.swt.widgets.Display (Display.java: 696)org.eclipse.swt.widgets.Display (Display.java: 687)com.samples.swt.first.Main.main (Main.java: 8)

就我所知,我做的每件事都是正确的。为什么会出现这个错误?它说Display必须在主线程上创建,据我所知,它是在主线程上创建的。然后继续讨论Exception in thread "main"

编辑:

现在错误消失了,我从使用swt-debug.jar切换到swt.jar。如果有人知道为什么调试jar会导致这个错误,我很想知道…

在启动应用程序时需要有-XstartOnFirstThread开关。SWT FAQ中的这个问题解释了原因。

最新更新