Что вызывает ошибку доступа к недопустимому потоку SWT при попытке протестировать приложение SWT?

Я пытался протестировать свое приложение SWT. У меня есть класс AppViewImplTest JUnit, написанный ниже. Тесты проходят без ошибок или сбоев в Eclipse, но при запуске mvn clean install из командной строки они отображаются как ошибка доступа к потоку SWT Invalid. Здесь также упоминается «*** ПРЕДУПРЕЖДЕНИЕ: дисплей должен быть создан в основном потоке из-за ограничений Какао». Я уверен, что мне просто что-то не хватает, но интересно, может ли кто-нибудь указать на это, у кого больше опыта в этом? Это происходит в момент, когда я вызываю getShell() в setUp(). Я хотел бы услышать некоторое понимание. Я видел примеры этой работы раньше и искал ответы на другие вопросы, но ничего не касался тестирования. Заранее спасибо.

public class AppViewImplTest {
    private Shell shell;
    private Display display;
    private AppViewImpl testAppViewImpl;

    /**
     * Runs before the tests to get a new Shell.
     */
    @Before
    public void setUp() throws Exception {
        shell = getShell();
    }

    /**
     * Test to ensure that {@link IllegalArgumentException} is thrown when the
     * parent shell is null.
     */
    @Test(expected = IllegalArgumentException.class)
    public void testErrorWhenAppViewShellIsNull() {
        new AppViewImpl(null);
    }

    /**
     * Test to ensure that the minimum size is set with constructor.
     */
    @Test
    public void testShellMinimumSizeIsSet() {
        testAppViewImpl = new AppViewImpl(shell);
        assertEquals(shell.getSize(), shell.getMinimumSize());
    }

    private Shell getShell() {
        if (shell != null && shell.isDisposed()) {
            shell = null;
        }
        Display currentDisplay = (this.display != null) ? this.display : Display.getCurrent();
        if (currentDisplay != null && !currentDisplay.isDisposed()) {
            Shell active = currentDisplay.getActiveShell();
            if (active != null) {
                shell = new Shell(active);
            }
        }
        if (shell == null) {
            shell = new Shell(currentDisplay);
        }
        return shell;
    }

}

Я не эксперт по JUnit или Maven, но «Недопустимый доступ к потоку» означает, что код пытается получить доступ к SWT-коду из потока, который не является основным потоком пользовательского интерфейса. «Отображение должно быть создано в основном потоке» специфично для macOS и означает, что поток пользовательского интерфейса должен быть первым запущенным потоком - обычно для этого используется аргумент JVM -XstartOnFirstThread.

greg-449 16.09.2018 08:38

«ВНИМАНИЕ: дисплей должен быть создан в основном потоке из-за ограничений Какао». вероятно, указывает на то, что JVM, запускающая тесты, была запущена без -XstartOnFirstThread.

nitind 17.09.2018 21:23
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
85
0

Другие вопросы по теме