0

次のコードを使用して、Eclipseプラグインのビューに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 {


}

これはEclipseRPC/プラグイン開発者にとっては問題なく機能しましたが、今度は別のeclipseクライアントでプラグインを実行しようとしました。そして、ScrollPaneにより、プラグインはクライアント全体をフリーズさせます。コードのこの部分を削除すると(つまり、ScrollPaneを使用せずにアプレットをパネルに直接追加すると)、プラグインは正常に実行されるため、これはScrollPaneであると確信しています。このフリーズの原因となる問題を知っている人はいますか?

4

1 に答える 1

2

システムが ScrollPane を作成しようとしていることが原因で、プラットフォーム固有の問題 GUI の問題が発生しているようです。

あなたが実行したテストは良いものでした.ScrollPaneを削除してクラッシュを救ったことは確かに、この問題が特にそのGUIコンポーネントに関連していることを意味します...またはScrollPaneが依存しているコンポーネント.

次の質問は、ScrollPane がそれ自体を構築するために何を使用しているのかということです。もちろん、答えは AWT です。つまり、Java Abstract Windowing Toolkit です。

残念ながら、AWT コンポーネントはシステム コンポーネントに結び付けられているため、完全に機能しないまれなケースに遭遇する可能性があります。そのようなシナリオで何をすべきか? 簡単な解決策の 1 つは、Swing コンポーネントを使用してみることです。

したがって、ここでは AWT の ScrollPane を使用していると想定しているので、Swing JScrollPane と交換することをお勧めします。 私の経験では、Swing コンポーネントを使用すると、この種の癖が生じる可能性ははるかに低くなります。ただし、各ツールキットには長所と短所があります。しかし、私の経験では..一般に、AWT コンポーネントでクラッシュするプログラムがある場合、対応する Swing コンポーネントの方がうまく機能する可能性があります。

参照: http://edn.embarcadero.com/article/26970

于 2012-01-21T22:27:47.790 に答える