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

Posted

技术标签:

【中文标题】Mac OSX(Eclipse Helios)上的 SWT 无效线程访问【英文标题】:SWT Invalid Thread Access on Mac OSX (Eclipse Helios) 【发布时间】:2011-12-15 19:19:47 【问题描述】:

我有最简单的 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 的限制,必须在主线程上创建显示。 线程“主”org.eclipse.swt.SWTException 中的异常: 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 会导致此错误,我很想知道...

【问题讨论】:

【参考方案1】:

您需要在启动应用程序时使用-XstartOnFirstThread 开关。 SWT FAQ 上的 question 解释了原因。

【讨论】:

以上是关于Mac OSX(Eclipse Helios)上的 SWT 无效线程访问的主要内容,如果未能解决你的问题,请参考以下文章

Win 7 上的 Eclipse Helios 中的 Ctrl 空间不起作用

启动失败。未找到二进制文件。 Eclipse Helios 上的 CDT

windows下使用mingw/gdb无法调试eclipse helios cdt上的小程序,控制台死机

在 Mac OSX 下使用 Qt 在 Eclipse CDT 中进行交叉编译

Eclipse mac osx:启动失败,找不到二进制文件

Eclipse Europa,Helios,Galileo之间的区别