SWT Неверный доступ к потокам в Mac OSX (Eclipse Helios) - PullRequest
11 голосов
/ 26 октября 2011

У меня самая простая из всех простых программ 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, я получаю следующую ошибку:

*** ПРЕДУПРЕЖДЕНИЕ: в главном потоке должен быть создан экран из-за ограничений Какао.
Исключение в потоке "main" 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) в орг.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,Если кто-нибудь знает, почему отладочная банка вызывает эту ошибку, я хотел бы знать ...

1 Ответ

19 голосов
/ 26 октября 2011

При запуске приложения необходимо иметь переключатель -XstartOnFirstThread. Этот вопрос в FAQ по SWT объясняет причины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...