java - 如何正确处理图形上下文——我需要最后尝试吗? (Java 1.7)

标签 java swing java-7 graphics2d try-finally

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

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);
    }

如我所见,使用的构造函数非常简单,但 tryfinally 仍然存在。所以我认为使用它们是一个很好的做法。

最佳答案

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

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

关于java - 如何正确处理图形上下文——我需要最后尝试吗? (Java 1.7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18194607/

相关文章:

java - 如何在另一个类中调用一个类的方法

java - C#-服务器和 Java-客户端 : TCP Socket Communication Issues

java - 将输入限制类更改为函数

JavaFX 等效于 Swing 的 pack()

java - 将 JPanel 动态添加到 groupLayout

Java转换时区

deployment - 用于 x86 windows 系统的 JavaFX exe 捆绑

自升级到 Java 7 后 Javadoc 格式被破坏

java - 1 和 0 的二维数组

java - 处理一串信息