3

如何正确处理图形上下文 - 我需要使用tryandfinally吗?简单的例子:

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存在。所以我认为使用它们是一个好习惯。

4

1 回答 1

5

在那个简单的例子中,不需要try..finally; g2D.drawLine不抛出异常。1但是,如果主体try可能抛出异常、执行return语句或以其他方式异常终止paint方法,那么我建议try..finally确保正确处理上下文。

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

于 2013-08-12T19:01:50.500 回答