我使用以下代码将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,因为如果删除这部分代码(即我将applet直接添加到没有ScrollPane的面板中),插件就会运行它应该运行。有人知道造成这种冻结的问题吗?
答案 0 :(得分:2)
您似乎遇到了特定于平台的问题GUI问题,这是由尝试创建ScrollPane的系统引起的。
您运行的测试是一个很好的测试 - 删除ScrollPane以挽救崩溃当然意味着此问题与该GUI组件或ScrollPane所依赖的某个组件有关。
接下来的问题是 - 什么是ScrollPane用于构建自己?嗯,答案当然是AWT--即java Abstract Windowing Toolkit。
不幸的是,由于AWT组件与系统组件相关联,因此您可能遇到一些不能很好地工作的极端情况。在这种情况下该怎么办?一个简单的解决方案是尝试使用Swing组件。
所以,因为我假设你在这里使用AWT的ScrollPane - 我建议用Swing JScrollPane交换它。根据我的经验,Swing组件不太可能导致这些排序怪癖。但是,每个工具包都有相关的优缺点。但根据我的经验..一般来说,如果你有一个程序在AWT组件上崩溃,相应的Swing组件可能会更好。