2014-04-04 4 views
0

SwingWorker을 사용하여 백그라운드에서 논리를 수행하는 Swing 응용 프로그램에서 작업하고 있습니다. 나는 클래스 A (그리고 몇몇 다른 것들)에서 오류 처리를 제거하고 aspectJ를 사용하여 중앙 처리하는 측면을 작성하려고 시도했다. 지금까지 나는 doInBackgroundpropertyChange 메쏘드를 잡기위한 pointcut을 쓸 수 없었다.aspectJ를 사용하여 SwingWorker 예외 처리

@Component 
public class A{ 

    public void perform(final String val) { 
     final SwingWorker<String, Object> myWorker = new SwingWorker<String, Object>(){ 

      @Override 
      protected String doInBackground() throws Exception { 
       String response = null; 
       try{ 
        //do logic and return response 
       }catch(MyException e){ 
        response "myexception"; 
       }catch(MyException2 e){ 
        response "myexception2"; 
       }catch(Exception e){ 
        response = "fatal exception" 
       } 
       return response; 
      } 
     }; 

     myWorker.addPropertyChangeListener(new PropertyChangeListener() { 
      @Override 
      public void propertyChange(PropertyChangeEvent evt) { 
       try { 
        //do logic 
       }catch(MyException3 e){ 
        //do logic 
       }catch(Exception e){ 
        //do logic 
       } 
      } 
     }); 
     myWorker.execute(); 
    } 
} 
+0

무엇이 문제입니까? – aepurniet

+0

SwingWorker가 익명 클래스로 호출되고 doInBackGround가 다른 스레드에서 실행됩니다. 지금까지 성공하지 못했지만 다른 pointcut 선언을 시도했습니다. – user3278795

답변

0

이 대답을 확인하십시오.

@AspectJ pointcut for subclasses of a class with an annotation

측면이 클래스의 바이트 코드로 짠 있으며,이 바이트 코드가 실행되고있는 스레드가 나던 문제. 또한 익명 클래스는 여전히 일반 클래스와 동일한 바이트 코드를 생성하지만 이름이 없습니다. 그래서이 문제 중 어느 것도 당신에게 영향을 미치지 않습니다.

가장 큰 문제는 특정 메서드 호출에 일치하는 pointcut을 작성하는 것입니다. SwingWorker.doInBackground. 필요한 것은 SwingWorker의 하위 유형 호출과 일치하는 포인트 컷입니다.

+0

힌트 @aepurniet에 감사드립니다. 나는 당신의 제안을 시도했지만 여전히 작동하지 않습니다. 이 예제는 http://stackoverflow.com/questions/1366360/aspectj-inner-class-join-points에서도 발견되었습니다. – user3278795