"m_Frame.add(chartPanel); m_Frame.validate()" 和 "m_Frame.add(chartPanel).validate();" 使用 jfreechart 的区别

Difference between "m_Frame.add(chartPanel); m_Frame.validate()" and "m_Frame.add(chartPanel).validate();" using jfreechart

我正在将 Eclipse RCP 应用程序从 Eclipse 3.0 迁移到 4.4,我有一个 class,我在其中创建了一个 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();

在 Eclipse RCP 3.0 中,这没有问题。现在,如果我尝试创建图表,应用程序就会卡住。

但是如果我把它改成这样:

...
m_Frame.add(chartPanel).validate();

它工作正常。我完全放弃验证或在添加 ChartPanel 之前验证 m_Frame 或使用 doLayout() 它工作正常。

有人可以解释这两种方法之间的区别吗?

我正在使用 Eclipse RCP 4.4 和 JDK 1.8。0_60

解决方案是使用方法 doLayout() 而不是 validate(),效果很好。