2011-08-11 57 views
5

Tôi đã học được rằng bạn cần phải gọi dispose() trên các đối tượng đồ họa mà bạn đã tạo khi bạn sử dụng xong chúng. Tuy nhiên, tôi đang gặp khó khăn trong việc tìm ra tài liệu API khi các đối tượng đồ họa được tạo ra. Rõ ràng khi một đối tượng đồ họa được chuyển vào một cuộc gọi lại, sau đó tôi đã không tạo ra nó, và không nên vứt bỏ nó (hoặc sửa đổi nó theo bất kỳ cách nào khác từ những gì tôi đã nghe), và nếu tôi gọi Graphics.create(), sau đó tôi đang tạo nó và tôi nên vứt bỏ nó.Tôi có cần phải vứt bỏ bối cảnh đồ họa được trả về từ Component.getGraphics() không?

Nhưng còn khi tôi gọi Component.getGraphics()? Đây có phải là việc tạo một đối tượng Graphics2D mới mà tôi có trách nhiệm xử lý, hoặc nó trả về một tham chiếu đến một đối tượng hiện có mà tôi không nên sửa đổi? Tài liệu không nói theo một trong hai cách.

Trả lời

2

Bạn chỉ vứt bỏ đối tượng Đồ họa mà bạn tạo một cách rõ ràng. Vì vậy, trong ví dụ của bạn, bạn sẽ không được gọi vứt bỏ trên đối tượng mà bạn lấy lại từ Component.getGraphics(), trừ khi tài liệu của nó nói rõ ràng rằng đối tượng đã được tạo cho bạn.

+3

Điều khiến tôi bối rối là BufferedImage. Nó có một phương thức gọi là createGraphics() có tên gợi ý rằng tôi sẽ cần phải gọi vứt bỏ. Nhưng nó có một phương thức khác có tên là getGraphics() trả về kết quả tương tự như createGraphics(), nhưng không nói bất cứ điều gì về người sở hữu giá trị trả về và bắt đầu đặt câu hỏi người sở hữu giá trị trả về từ Component.getGraphics(). – pavon

+0

Tôi biết ý của bạn là gì. Java không thực sự có một tiêu chuẩn đặt tên hoặc quy ước khi nói đến chỉ ra các nguồn lực trả về mà sẽ yêu cầu xử lý đặc biệt bởi người gọi. Chủ yếu là vì GC tự động cung cấp quá nhiều bìa cho bộ nhớ mgmt. Có lẽ tốt nhất nên tham khảo ý kiến ​​của Javadoc khi nghi ngờ, và đôi khi thậm chí là mã. – Perception

+0

Điều này không thực sự trả lời câu hỏi cho tôi. Vì vậy, là kết quả của getGraphics "tạo ra cho tôi"? Hoặc câu trả lời cho điều đó có thể khác nhau tùy theo ngữ cảnh? – Amalgovinus

Các vấn đề liên quan