ScrollPane заставляет мой плагин зависать
Я использую следующий код для включения апплета в 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/For разработчиков плагинов, но теперь я попытался запустить плагин в другом клиенте Eclipse. И там ScrollPane заставляет плагин заморозить весь клиент. Я уверен, что это ScrollPane, потому что, если я удаляю эту часть кода (т.е. я добавляю апплет непосредственно на панель без ScrollPane), плагин запускается так, как должен. Кто-нибудь знает проблему, которая вызывает это замораживание?
1 ответ
Похоже, что у вас проблема с графическим интерфейсом для конкретной платформы, которая вызвана тем, что система пытается создать ScrollPane.
Тест, который вы запустили, был удачным - удаление ScrollPane для спасения сбоя, безусловно, подразумевает, что эта проблема связана, в частности, с этим компонентом графического интерфейса... или каким-либо компонентом, от которого зависит ScrollPane.
Итак, следующий вопрос - что ScrollPane использует для создания себя? Ну, ответ, конечно же, AWT - то есть java Abstract Windowing Toolkit.
К сожалению, поскольку компоненты AWT привязаны к системным компонентам, вы можете столкнуться с несколькими серьезными случаями, когда они работают не совсем хорошо. Что делать по такому сценарию? Одним из простых решений является попытка использования компонента Swing.
Итак, поскольку я предполагаю, что вы используете ScrollPane от AWT, я бы предложил заменить его на Swing JScrollPane. По моему опыту, компоненты Swing гораздо реже приводят к подобным причудам. Тем не менее, есть плюсы / минусы, связанные с каждым инструментарием. Но по моему опыту... в общем, если у вас есть программа, которая падает на компоненте AWT, соответствующий компонент Swing может работать лучше.
Смотрите: http://edn.embarcadero.com/article/26970