2010-04-26 5 views
-1

이 생성자가 있습니다.생성자가 다시 호출되고 있습니까?

public UmlDiagramEntity(ReportElement reportElement, int pageIndex, Controller controller) { 
    super(reportElement.getX1(), reportElement.getY1(), reportElement.getX2(), reportElement.getY2()); 
    setLayout(null); 

    this.pageIndex = pageIndex; 
    this.controller = controller; 
    reportElements = reportElement.getInternalReportElements(); 
    components = new ArrayList<AbstractEntity>(); 
    changedComponentIndex = -1; 

    PageListener p = new PageListener(); 
    this.addMouseMotionListener(p); 
    this.addMouseListener(p); 

    setPage(); 
} 

그리고 동일한 클래스의 업데이트 방법이 있습니다. 내가 디버거의 흐름을 따르

@Override 
    public void update(ReportElement reportElement) { 
     if (changedComponentIndex == -1) { 
      super.update(reportElement); 
     } else { 
      reportElements = reportElement.getInternalReportElements(); 
      if (components.size() == reportElements.size()) { 
       if (!isCommitted) { 
        if (reportElement.getType() == ReportElementType.UmlRelation) { 
         if (checkInvolvementAndSet(changedComponentIndex)) { 
          anchorEntity(changedComponentIndex); 
         } else { 
          resistChanges(changedComponentIndex); 
         } 
         return; 
        } 
       } 
..................goes on 

, 나는 업데이트가 호출 될 때, 어딘가에 방법, 프로그램이 생성자에 가서 (슈퍼, pageIndex 등) 다시 모든 것을 실행하는 것을 알 수있다. 왜 그것은 생성자에게 가는가? D 나는 거기에 가라고 말하지 않았다.

나는 더 깊은 분석을하고 원하는 경우 생성자로가는 곳을 볼 수 있습니다. 덧붙여서 changedComponentIndex은 정적 변수입니다.

+0

생성자에 다시 들어 왔을 때의 스택 추적을 표시 할 수 있습니까? – rsp

+1

"더 깊은 분석을하고 원하는 경우 생성자가 어디로가는 지 확인할 수 있습니다." 나는 그것이 당신 자신의 질문에 대답하는 데 도움이 될 것이라고 생각합니다 ... – Thomas

+0

오, 미안 해요, 지금은 알아 냈어, 아마 비정상적인 전화가 아니지만 내 실수 야. – Halo

답변

1

두 개의 다른 개체를 만드는 것이 훨씬 더 가능성이 높습니다. 스택 추적과 같은 더 많은 정보를 제공해야합니다. 여기 당신은 생성자가 호출되는 것을 보지 못했습니다!

0

당신이 묘사하는 행동은 거의 불가능합니다. 코드가 표시 한 것과 다르거 나 디버깅한다고 생각하는 코드를 디버깅하지 않습니다. complete code that we can run 없이는 그게 전부입니다.

+0

예, 업데이트 내 메소드 호출에 문제가 있습니다. 잠깐 동안 나는 '불가능한'일이 일어났다 고 생각했다. – Halo

0

업데이트가 생성자 내에서 간접적으로 호출되지 않아 업데이트의 중단 점이 트리거되는 것이 확실합니까?

생성자의 시작 부분과 끝 부분에 중단 점을 설정하고 마지막 부분에 중단 점을 설정하십시오. 첫 번째 생성자 중단 점에 도달하면 '계속'을 누르고 다음에 실행될 중단 점을 확인합니다.

0

이것은 멀티 스레드인가요? 다른 스레드에서 생성 된 다른 인스턴스의 생성자가 호출 될 가능성이 있습니까?

+0

아니, 아니, 고마워, 나는 불가능한 일이 일어나고 있다고 생각 했어. 그래서 나는 좀 이상했다. – Halo

관련 문제