2012-01-12 4 views
0

내가 내 이클립스 플러그인 나의보기에의 ScrollPane의 애플릿을 포함하는 다음 코드를 사용하여 동결됩니다 :는 ScrollPane에 내 플러그인

@Override 
    public void createPartControl(Composite parent) { 

     composite = new Composite(parent, SWT.EMBEDDED); 
     final Frame frame = SWT_AWT.new_Frame(composite); 
     frame.setLayout(new BorderLayout()); 

     Panel panel = new Panel(); 
     panel.setSize(WIDTH, HEIGHT); 
     pap = new ProcessingEmbedded2();  
     ScrollPane pane = new ScrollPane(ScrollPane.SCROLLBARS_AS_NEEDED); 

     panel.setLayout(new BorderLayout()); 
     panel.add(pap, BorderLayout.CENTER); 

     frame.add(pane, BorderLayout.CENTER); 
     pane.add(panel); 
} 


public class ProcessingEmbedded2 extends Applet { 


} 

이것은 플러그인 개발자를 위해 이클립스 RPC /에서 잘 작동했지만 지금 다른 Eclipse 클라이언트에서 플러그인을 실행하려고했습니다. 그리고 거기서 ScrollPane은 플러그인으로 하여금 전체 클라이언트를 고정시킵니다. ScrollPane이라고 확신합니다. 코드의이 부분을 제거하면 (즉, 애플릿을 ScrollPane없이 패널에 직접 추가하기 때문에) 플러그인이 정상적으로 실행되기 때문입니다. 아무도이 동결을 일으키는 문제를 알고 있습니까?

+2

시도 (http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstack.html) 여기서 볼 수 있습니다 그것은에있다. –

답변

2

ScrollPane을 만들려고하는 시스템에서 특별히 발생하는 플랫폼 관련 문제는 GUI 문제인 것처럼 보입니다.

실행 한 테스트는 좋았습니다. 충돌을 구하기 위해 ScrollPane을 제거하면이 문제가 특히 GUI 구성 요소 또는 ScrollPane이 종속 된 일부 구성 요소와 관련되어 있음을 의미합니다.

그래서 다음 질문은 - ScrollPane이 자체 빌드에 사용하는 것은 무엇입니까? 물론 대답은 AWT, 즉 java Abstract Windowing Toolkit입니다.

AWT 구성 요소는 시스템 구성 요소와 연결되어 있기 때문에 완벽하게 작동하지 않는 경우가있을 수 있습니다. 그런 시나리오에서해야 할 일은 무엇입니까? 한 가지 간단한 해결책은 Swing 구성 요소를 사용하는 것입니다.

그래서 AWT의 ScrollPane을 여기에서 사용한다고 가정하기 때문에 - Swing JScrollPane으로 바꾸는 것이 좋습니다. 제 경험상 스윙 구성 요소는 이러한 종류의 단점을 초래할 가능성이 훨씬 적습니다. 그러나 각 툴킷과 관련된 장점/단점이 있습니다. 하지만 내 경험에 따르면 .. 일반적으로 AWT 구성 요소에서 충돌하는 프로그램이 있으면 해당 Swing 구성 요소가 더 잘 작동 할 수 있습니다.

참조 : [jstack을]와 스레드 스택 트레이스를 얻을 수 http://edn.embarcadero.com/article/26970

+0

고마워,하지만 ... 정말이야? swt_awt 태그는 SWT 구성 요소에 AWT를 포함한다는 것을 의미한다고 생각했습니다. ScrollPane 클래스가 SWT에 있다고 생각하지 않습니다. http://dev.eclipse.org/mhonarc/lists/platform-swt-dev/msg01564.html – jayunit100

+0

아, 죄송합니다. 당신은 바로 그럴 것입니다. –