ScrollPane заставляет мой плагин зависать - PullRequest
0 голосов
/ 12 января 2012

Я использую следующий код для включения апплета в ScrollPane в мое представление для моего плагина eclipse:

@Override
    public void createPartControl(Composite parent) {

        composite = new Composite(parent, SWT.EMBEDDED);
        final Frame frame = SWT_AWT.new_Frame(composite);
        frame.setLayout(new BorderLayout());

        Panel panel = new Panel();
        panel.setSize(WIDTH, HEIGHT);
        pap = new ProcessingEmbedded2();       
        ScrollPane pane = new ScrollPane(ScrollPane.SCROLLBARS_AS_NEEDED);

        panel.setLayout(new BorderLayout());
        panel.add(pap, BorderLayout.CENTER);

        frame.add(pane, BorderLayout.CENTER);
        pane.add(panel);
}


public class ProcessingEmbedded2 extends Applet {


}

Это хорошо работало в Eclipse RPC / Для разработчиков плагина, но теперь я попытался запуститьплагин в другом клиенте затмения.И там ScrollPane заставляет плагин заморозить весь клиент.Я уверен, что это ScrollPane, потому что, если я удаляю эту часть кода (то есть, я добавляю апплет непосредственно на панель без ScrollPane), плагин работает как надо.Кто-нибудь знает проблему, которая вызывает это замораживание?

1 Ответ

2 голосов
/ 22 января 2012

Похоже, что у вас проблема с графическим интерфейсом для конкретной платформы, которая вызвана тем, что система пытается создать ScrollPane.

Тест, который вы запустили, был удачным - удаление ScrollPane для спасения сбоя, безусловно, подразумевает, что эта проблема связана, в частности, с этим компонентом графического интерфейса пользователя ... или с некоторым компонентом, от которого зависит ScrollPane.

Итак, следующий вопрос - что ScrollPane использует для сборки? Ну, ответ, конечно же, AWT - то есть java Abstract Windowing Toolkit.

К сожалению, поскольку компоненты AWT привязаны к системным компонентам, вы можете столкнуться с несколькими серьезными случаями, когда они работают не совсем хорошо. Что делать по такому сценарию? Одним из простых решений является попытка использования компонента Swing.

Итак, поскольку я предполагаю, что вы используете здесь AWT ScrollPane - Я бы предложил заменить его на Swing JScrollPane. По моему опыту, компоненты Swing с меньшей вероятностью приведут к этим видам причуды. Тем не менее, есть плюсы / минусы, связанные с каждым инструментарием. Но по моему опыту ... в общем, если у вас есть программа, которая падает на компоненте AWT, соответствующий компонент Swing может работать лучше.

См .: http://edn.embarcadero.com/article/26970

...