2011-08-11 32 views
5

我已經瞭解到,您需要在您完成使用時創建的Graphics對象上調用dispose()。但是,在創建Graphics對象時,我很難從API文檔中找出答案。我是否需要處理從Component.getGraphics()返回的圖形上下文?

顯然,當一個Graphics對象被傳遞給一個回調函數時,我還沒有創建它,並且不應該處理它(或者以我聽到的其他任何方式修改它),並且如果我致電Graphics.create(),然後我創建它,我應該處理它。

但是,當我打電話給Component.getGraphics()時呢?這是創建一個新的Graphics2D對象,我負責處理,還是它返回一個對我不應該修改的現有對象的引用?文檔沒有說明。

回答

2

您只能配置您明確創建的Graphics對象。因此,在您的示例中,您不會調用從Component.getGraphics()中返回的對象的處置,除非其文檔明確指出該對象是爲您創建的。

+3

真正讓我困惑的是BufferedImage。它有一個名爲createGraphics()的方法,其名稱暗示我需要調用dispose。但它有另一個名爲getGraphics()的方法,它返回與createGraphics()相同的結果,但沒有說明誰擁有返回值,並且讓我開始質疑誰擁有從Component.getGraphics()返回的值。 – pavon

+0

是的,我知道你的意思。當涉及到指示返回的資源時,Java並沒有真正的命名標準或約定,這將需要調用者進行特殊處理。主要是因爲自動GC爲內存管理提供了很多內容。如果有疑問,最好諮詢Javadoc,有時甚至是代碼。 – Perception

+0

這並不能真正回答我的問題。那麼getGraphics的結果是「爲我創建的」?或者根據上下文的不同,答案可能會有所不同? – Amalgovinus

相關問題