如何正确处理图形上下文 - 我需要使用 try
和 finally
吗?简单示例:
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g.create();
try {
g2D.drawLine(0, 0, 10, 0);
} finally {
g2d.dispose();
}
}
编辑
这是来自 java.awt.Window 类的示例:
/**
* {@inheritDoc}
*
* @since 1.7
*/
@Override
public void paint(Graphics g) {
if (!isOpaque()) {
Graphics gg = g.create();
try {
if (gg instanceof Graphics2D) {
gg.setColor(getBackground());
((Graphics2D)gg).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC));
gg.fillRect(0, 0, getWidth(), getHeight());
}
} finally {
gg.dispose();
}
}
super.paint(g);
}
如我所见,使用的构造函数非常简单,但 try
和 finally
仍然存在。所以我认为使用它们是一个很好的做法。
最佳答案
在那个简单的例子中,不需要try..finally
; g2D.drawLine
不会抛出异常。1 但是,如果 try
的主体可能抛出异常,则执行 return
语句,或者以其他方式异常终止 paint
方法,那么我会推荐 try..finally
以确保正确处理上下文。
1 我想它可能会抛出 OutOfMemoryError
或其他一些未经检查的异常。不过,如果它这样做了,那么处理 Graphics2D
上下文将是您遇到的最少的问题。
关于java - 如何正确处理图形上下文——我需要最后尝试吗? (Java 1.7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18194607/