0

我使用以下代码将 ScrollPane 中的 Applet 包含到我的 Eclipse 插件视图中:

@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 {


}

这在 Eclipse RPC/For 插件开发人员中运行良好,但现在我尝试在另一个 Eclipse 客户端中运行该插件。那里的 ScrollPane 会导致插件冻结整个客户端。我确定它是 ScrollPane,因为如果我删除这部分代码(即,我将小程序直接添加到没有 ScrollPane 的面板中),插件就会正常运行。有人知道导致这种冻结的问题吗?

4

1 回答 1

2

您似乎遇到了平台特定问题 GUI 问题,该问题是由系统尝试创建 ScrollPane 引起的。

您运行的测试是一个很好的测试 - 删除 ScrollPane 以挽救崩溃当然意味着这个问题是相关的,特别是与那个 GUI 组件......或 ScrollPane 所依赖的某个组件。

所以下一个问题是 - ScrollPane 使用什么来构建自己?嗯,答案当然是 AWT——即 java Abstract Windowing Toolkit。

不幸的是,由于 AWT 组件与系统组件相关联,您可能会遇到一些它们不能很好地工作的极端情况。在这种情况下该怎么办?一种简单的解决方案是尝试使用 Swing 组件。

因此,由于我假设您在这里使用 AWT 的 ScrollPane -我建议将其换成 Swing JScrollPane。 根据我的经验,Swing 组件不太可能导致这些怪癖。但是,每个工具包都有相关的优点/缺点。但根据我的经验.. 一般来说,如果您的程序在 AWT 组件上崩溃,则相应的 Swing 组件可能会更好地工作。

见:http ://edn.embarcadero.com/article/26970

于 2012-01-21T22:27:47.790 回答