2015-11-04 2 views
0

Я переношу приложение 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

+1

Вызов 'pack()' будет вызывать 'validate()'. Где 'setVisible()'? Где 'invokeLater()'? –

+0

Это приложение не использует Threading, поэтому мне не нужно вызывать 'invokeLater()' Я предполагаю? 'pack()' doesen't работает либо потому, что вызывает 'validate()', что затем приводит к застреванию приложения. Проблема в том, что я не могу изменить код, не объясняя причину, почему 'validate()' работал с Eclipse RCP 3.0, но не с 4.4. Также странно, что я могу «проверять()« ChartPanel »и« Кадр »отдельно, но я не могу« проверять() »Рам после добавления ChartPanel. Я также обновил jfreechart до самой новой версии, но это не помогло. –

+0

Вам _do_ need 'invokeLater()' нравится [здесь] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html); 'pack()' не должен застревать; отредактируйте свой вопрос с помощью [mcve]. –

ответ

0

Решение было использовать метод doLayout() вместо validate(), который сделал работу очень хорошо.

 Смежные вопросы

  • Нет связанных вопросов^_^