如何正确处理图形上下文-我是否需要最终尝试?(Java 1.7)

如何正确处理图形上下文-我是否需要最终尝试?(Java 1.7),java,swing,java-7,graphics2d,try-finally,Java,Swing,Java 7,Graphics2d,Try Finally,如何正确处理图形上下文-我是否需要使用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类中的一个示例: /**

如何正确处理图形上下文-我是否需要使用
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
仍然存在。因此,我认为使用它们是一个很好的实践。

在这个简单的例子中,没有必要尝试。.最后,
g2D.drawLine
不会引发异常。1但是,如果
try
的主体可能引发异常,执行
return
语句,或者异常终止
paint
方法,那么我建议
try..finally
以确保正确处理上下文

1我想,它可能会抛出一个
OutOfMemoryError
或其他未检查的异常。但是,如果这样做,处理
Graphics2D
上下文将是最小的问题