2011-08-11 17 views
5

Nauczyłem się, że musisz wywołać dispose() na obiektach graficznych, które utworzyłeś, gdy skończysz je używać. Mam jednak problem z dokumentacją interfejsu API podczas tworzenia obiektów graficznych.Czy muszę usunąć kontekst graficzny zwrócony z Component.getGraphics()?

Oczywiście, gdy obiekt Grafiki jest przekazywany do wywołania zwrotnego, nie został utworzony i nie powinien się go pozbyć (lub zmodyfikować go w inny sposób niż to, co słyszałem), a jeśli zadzwonię Graphics.create(), a następnie go tworzę i powinienem się go pozbyć.

Ale co z tym, gdy zadzwonię do Component.getGraphics()? Czy tworzy to nowy obiekt Graphics2D, za który jestem odpowiedzialny, lub czy zwraca referencję do istniejącego obiektu, którego nie powinienem modyfikować? Dokumentacja nie mówi w żaden sposób.

Odpowiedz

2

Wyrzucasz tylko obiekty graficzne, które jawnie tworzysz. Tak więc w twoim przykładzie nie wywołasz dispose na obiekcie, który otrzymasz od Component.getGraphics(), chyba że jego dokumentacja wyraźnie stwierdza, że ​​obiekt został stworzony dla ciebie.

+3

Co naprawdę mnie zdezorientowało to BufferedImage. Ma metodę o nazwie createGraphics(), której nazwa wskazuje, że musiałbym wywołać dispose. Ale ma inną metodę o nazwie getGraphics(), która zwraca ten sam wynik co createGraphics(), ale nie mówi nic o tym, kto jest właścicielem zwróconej wartości, i kazał mi zacząć kwestionować, kto jest właścicielem zwróconej wartości z Component.getGraphics(). – pavon

+0

Tak, wiem, co masz na myśli. Java nie ma standardu lub konwencji nazewnictwa, jeśli chodzi o wskazanie zwróconych zasobów, które będą wymagały specjalnej obsługi przez osobę dzwoniącą. Głównie dlatego, że automatyczna GC daje tak dużo przykryć pamięci MGMT. Najlepiej jest skonsultować się z Javadoc w razie wątpliwości, a czasem nawet z kodem. – Perception

+0

To tak naprawdę nie odpowiada na moje pytanie. Czy powstał rezultat "GetGraphics", który został "stworzony dla mnie"? Lub odpowiedź na to pytanie może być różna w zależności od kontekstu? – Amalgovinus

Powiązane problemy