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

标签 java eclipse 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();
    }
}

当我在 Mac OSX 上从 Eclipse Helios 运行它时,出现以下错误:

***WARNING: Display must be created on main thread due to Cocoa restrictions.
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。如果有人知道调试 jar 导致此错误的原因,我很想知道...

最佳答案

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

关于java - Mac OSX (Eclipse Helios) 上的 SWT 无效线程访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7904388/

相关文章:

java - 在这种情况下如何为 GSON 指定通用类型

java - Eclipse 在包上显示错误,但在此包内 Eclipse 不显示错误

java - 停止循环输出

java - 在 Windows 上的 Eclipse RCP 应用程序中使用时如何禁用 swt 浏览器点击声音?

java - SWT - 如何调试 "No more handles"

java - Hadoop-MapReduce不减少

java - 我可以使用Java应用程序来控制Windows 7功能吗?

java - Websphere Application Server v8 无法连接到服务器进程

java - 如何解决 eclipse View 的红色方 block 图标?

java - 在 PolylineConnection 的末端创建一个空心箭头?