2013-08-12 2 views
3

그래픽 컨텍스트를 올바르게 처리하는 방법 - tryfinally을 사용해야합니까? 간단한 예 :그래픽 컨텍스트를 올바르게 처리하는 방법 - 마침내 시도해야합니까? (Java 1.7)

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 여전히 종료됩니다. 그래서 저는 그것들을 사용하는 것이 좋은 습관이 될 것이라고 생각합니다.

답변

5

간단한 예에서 try..finally은 필요하지 않습니다. g2D.drawLine은 예외를 throw하지 않습니다. 그러나 try의 본문에서 예외가 발생하거나 return 문을 실행하거나 paint 메서드를 비정상적으로 종료하는 경우 문맥이 올바르게 처리되도록 try..finally을 권장합니다.

1

그것은, 나는 가정, OutOfMemoryError 또는 다른 체크되지 않는 예외 던질 수있다. 그래도 그럴 경우 Graphics2D 컨텍스트를 삭제하는 것이 가장 적은 문제입니다.

관련 문제