Муравейбольше не работает в Eclipse Helios (3.6) - PullRequest
2 голосов
/ 15 июля 2010

У меня есть файл сборки в моих проектах Eclipse.Одна из функций этого файла - задать вопрос через подсказку, используя тег <input/>.После обновления до Eclipse Helios это больше не работает, поскольку я получаю следующую ошибку:

[input] ***WARNING: Display must be created on main thread due to Cocoa restrictions.

Invalid thread access

Как я могу исправить эту ошибку

Ответы [ 3 ]

3 голосов
/ 15 июля 2010

Это выглядит как ошибка 303869

Я отправил в запрос на добавление в Apple: идентификатор ошибки # 7840189.
Если у нас есть возможность запустить код отображения в главном потоке через эту новую рассылку объект / метод, я думаю, что SWT можно заставить работать в апплетах, не изменяя слишком много кода, не так ли?

Проверьте также ошибка 288436 , чтобы увидеть, имеет ли это значение в вашем случае.

2 голосов
/ 30 августа 2010

Что касается моего предыдущего ответа, обе ошибки теперь закрыты как исправленные.

ошибка 303869 в частности, были закрыты в начале этого месяца с:

Iдумаю, что мы можем закрыть эту ошибку, теперь она работает хорошо с последним обновлением Java для Mac OS X 10.6.
Мы можем выполнить код в главном потоке, и теперь отображается пользовательский интерфейс.В апплете мы используем код, подобный следующему, для создания экземпляра дисплея:

com.apple.concurrent.Dispatch.getInstance().getNonBlockingMainQueueExecutor().execute(
new Runnable(){

            @Override
            public void run() {

                if( dDisplay == null )
                {
                    dDisplay = Display.getDefault();    
                    sShell  = SWT_AWT.new_Shell(dDisplay, cCanvas);
                    mLogger.info("Display is created");
                }
...
            } 
        } );
...

Спасибо всем, и особенно Майку из Apple, за решение проблемы, она была не столько связана с SWTИМХО.


Для ошибка 288436 :

Да, в файле JNLP есть небольшая ошибка, которая вызывает проблему.
Указание «<j2se version="1.6*" />» в теге «<resources>» без каких-либо других атрибутов отбрасывает анализатор JNLP и приводит к игнорированию более поздней строки «<j2se version="1.6*" java-vm-args="-XstartOnFirstThread"/>».
Две строки заканчиваются ссылкой на дваотдельные JVM, и первая спецификация - «выигрыш».Эта спецификация не имеет аргументов VM, поэтому JVM запускается нормально, а SWT загружается не в тот поток.


Параметр -XstartOnFirstThread упоминается в ошибка 211625 :

Это необходимо, поскольку для Cocoa требуется, чтобы все пользовательские события отправлялись в потоке 0.
Без -XstartOnFirstThread, отображение будетсоздайте NSApplication в неосновном потоке, и SWT не сможет извлекать и отправлять события из неосновного потока.

Будьте осторожны с -XstartOnFirstThread option: liek this ошибка упоминает :

Причина этого заключается в том, что новый режим разработчика реализован в Swing, а старый размещенный режим был реализован в SWT.
SWT требует -XstartOnFirstThread для работы на Mac.
Но это, однако, ломает любую Java-программу, использующую Swing.

Так что вы не можете добавить -XstartOnFirstThread с версии 2.0 и выше,В более старых версиях это все же требование.

1 голос
/ 31 августа 2010

Наконец-то нашли решение этой проблемы:

Во-первых, убедитесь, что ваша версия Java обновлена ​​(1.6.0.20 на момент написания этой статьи). Во-вторых, измените аргументы времени выполнения Ant, выполнив это:

  1. Открыть: Выполнить> Внешние инструменты> Конфигурации внешних инструментов
  2. Выберите файл сборки
  3. Открыть вкладку JRE
  4. В поле ввода аргументов VM добавьте следующее: -XstartOnFirstThread
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...