在Mac OSX上出现SWT无效线程访问(Eclipse Helios)错误

12

我有一个最简单的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会导致此错误,我很想知道...

1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接