Eclipse: не удалось создать виджет браузера SWT

Я установил eclipse (4.10) на свой компьютер с Linux (KDE Neon 5.15), и все работает достаточно хорошо, за исключением JavaDoc. Всякий раз, когда я просматриваю JavaDoc-hover, я получаю простое текстовое представление, а внизу написано

NOTE: The SWT Browser widget could not be created. This fallback mode doesn't show links and misses other functionality.

Дальнейшее исследование привело меня к созданию минимального SWT-примера с использованием виджета SWT Browser:

import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class BrowserTest {
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);

        shell.setLayout(new FillLayout());

        Browser b = new Browser(shell, SWT.NONE);
        b.setUrl("www.google.com");

        shell.open();

        while (!shell.isDisposed()) {
            display.readAndDispatch();
            display.sleep();
        }

        display.dispose();
    }
}

Попытка выполнить этот код не удалась с исключением

Exception in thread "main" org.eclipse.swt.SWTError: No more handles [Browser style SWT.MOZILLA and Java system property org.eclipse.swt.browser.DefaultType=mozilla are not supported with GTK 3 as XULRunner is not ported for GTK 3 yet]
    at org.eclipse.swt.SWT.error(Unknown Source)
    at org.eclipse.swt.browser.MozillaDelegate.<init>(Unknown Source)
    at org.eclipse.swt.browser.Mozilla.create(Unknown Source)
    at org.eclipse.swt.browser.Browser.<init>(Unknown Source)
    at Main.main(Main.java:31)

что ясно показывает, что система действительно не может создать виджет браузера. Хотя на этот раз сообщение об ошибке более информативно.
Я также попытался установить стиль виджета браузера на SWT.MOZILLA, что дало то же сообщение об ошибке (как и ожидалось), и использование SWT.WEBKIT также вызвало ту же ошибку, хотя и без пояснительного текста (поэтому только org.eclipse.swt.SWTError: No more handles).

Хорошо для тех, кто проголосовал за этот вопрос как OT (или думает об этом): проблема более или менее специфична для Linux (это, безусловно, связано с ее решением). Так где же еще разместить такой вопрос, как не здесь? Это происходит в Linux и исправляется внутри Linux (а не внутри самого eclipse). Поэтому для меня это именно то, о чем этот сайт.

Raven 06.04.2019 15:44

@muru Я бы не назвал это «общей отладкой», код есть только там, поскольку он помог добраться до корня исходной проблемы. Вопрос, на который здесь дается ответ, заключается в том, почему eclipse не будет правильно отображать JavaDoc при запуске в Linux. Так что я бы не сказал, что это считается отладкой.

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

Ответы 2

Ответ принят как подходящий

Из сообщения об ошибке и некоторых дальнейших исследований становится ясно, что виджет браузера SWT использует программное обеспечение XULRunner для рендеринга HTML. Как говорится в сообщении об ошибке, это не было перенесено на GTK3 (пока) и поэтому не может использоваться. Однако затмение по умолчанию запускается в режиме GTK3, так что это основная проблема.

Попыткой решить эту проблему может быть перевод eclipse в режим GTK2 (см. здесь), но дальнейшее изучение Часто задаваемые вопросы о затмении показывает, что, начиная с Eclipse 4.8 и выше, XULRunner вообще больше не поддерживается.

Поэтому возможность использовать стиль SWT.MOZILLA для создания браузера кажется недействительной в этих версиях. Вместо этого нужно сосредоточиться на том, чтобы заставить работать стиль SWT.WEBKIT. Для этого другое посещение в Вопросы-Ответы показывает, что

WebKitGTK 1.2.0 or newer must be in the library load path.

Поэтому я пошел дальше, нашел соответствующую библиотеку и установил ее (libwebkitgtk-3.0-0 в моем случае).
После установки этого пакета выше SWT-snipped запустился нормально, и после перезапуска eclipse JavaDoc вернулся к полной функциональности.

Если это не работает для вас напрямую, возможно, вам придется соответствующим образом установить переменную org.eclipse.swt.browser.DefaultType. Согласно этот вопрос, это можно сделать, убедившись, что -Dorg.eclipse.swt.browser.DefaultType=webkit находится в файле eclipse.ini.

Для Arch Linux мне пришлось установить webkit2gtk из AUR, чтобы он заработал.

Кстати, это в официальных репозиториях (pacman -S webkit2gtk), а не в AUR (уже)

Antoni 14.09.2021 17:35

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