2015-11-04 26 views
0

我正在將Eclipse RCP應用程序從Eclipse 3.0遷移到4.4,並且我有一個類使用jfreechart創建java.awt.Frame m_Frame和ChartPanel chartPanel(jfreechart-1.0.15.jar,jcommom-1.0 .18.jar)。「m_Frame.add(chartPanel); m_Frame.validate()」和「m_Frame.add(chartPanel).validate();」之間的區別使用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

這個應用程序doesen't使用線程,所以我不必調用'invokeLater()'我猜? 'pack()'doesen't不是因爲它調用'validate()'而導致應用程序卡住。問題在於,如果不解釋爲什麼'validate()'使用Eclipse RCP 3.0而不使用4.4的原因,我就無法更改代碼。另一個奇怪的事情是,我可以單獨驗證()ChartPanel和Frame,但在添加ChartPanel後我無法'驗證'Frame。我也更新jfreechart到最新版本,但它沒有幫助。 –

+0

你需要'invokeLater()'像[here](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html); 'pack()'不應該卡住;請用[mcve]編輯你的問題。 –

回答

0

的解決方案是使用的方法doLayout()而不是validate(),該做的工作就好了。

相關問題