Я переношу приложение Eclipse RCP из Eclipse 3.0 в 4.4, и у меня есть класс, в котором я создаю java.awt.Frame m_Frame
и ChartPanel chartPanel
с использованием jfreechart (jfreechart-1.0.15.jar, jcommom-1.0 .18.jar).Разница между «m_Frame.add (chartPanel); m_Frame.validate()» и «m_Frame.add (chartPanel) .validate();» using jfreechart
код изначально выглядит следующим образом:
...
m_Frame.add(chartPanel);
m_Frame.validate();
В Eclipse RCP 3.0 это работает без проблем. Теперь приложение просто застревает, если я пытаюсь создать диаграмму.
Но если я могу изменить его к этому:
...
m_Frame.add(chartPanel).validate();
он работает отлично. Я полностью проверяю валидацию или проверяю m_Frame
до того, как ChartPanel добавлен или используется doLayout()
, он отлично работает.
Может ли кто-нибудь объяснить разницу между этими двумя подходами?
Я использую Eclipse RCP 4.4 и JDK 1.8.0_60
Вызов 'pack()' будет вызывать 'validate()'. Где 'setVisible()'? Где 'invokeLater()'? –
Это приложение не использует Threading, поэтому мне не нужно вызывать 'invokeLater()' Я предполагаю? 'pack()' doesen't работает либо потому, что вызывает 'validate()', что затем приводит к застреванию приложения. Проблема в том, что я не могу изменить код, не объясняя причину, почему 'validate()' работал с Eclipse RCP 3.0, но не с 4.4. Также странно, что я могу «проверять()« ChartPanel »и« Кадр »отдельно, но я не могу« проверять() »Рам после добавления ChartPanel. Я также обновил jfreechart до самой новой версии, но это не помогло. –
Вам _do_ need 'invokeLater()' нравится [здесь] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html); 'pack()' не должен застревать; отредактируйте свой вопрос с помощью [mcve]. –