2008-02-14

使用Sleak分析RCP应用潜在内存泄露

关键字: rcp 内存泄漏 sleak
1. following the website(http://www.eclipse.org/swt/tools.php) instructions:1)Extract the zip into the eclipse/plugins/ folder2)Extract the .options file from the eclipse/plugins/org.eclipse.ui_.jar/ archive to the eclipse/ folder.2. following the instructions from Eclipse newsgroup:Open your launch ...
目前是一个IM系统,需要在网络连接断开的时候,关掉主程序,回到登陆对话框,并且在网络连接恢复的时候,可以自动登陆,类似于MSN和Skype的功能。 我们底层用的是SMACk,在3.0的版本中,已经实现了自动登陆的功能,但现在的问题出现在网络故障的那一步,我们所作的是调用 PlatformUI.getWorkbench().restart()方法,实现重启,并且使用IPreferenceStore来保存一些基本类型的数据信息。可是这样一来,内存中的所有对象就会被清理掉,新创建的ConnectionListener就无法监听到XMPPConnection的变化,于是UI就无法收到消息,从而不能自 ...
我们知道,在SWT中,有两条关于Dispose的法则: 1。如果你创建了它,那么就dispose它。你应当释放那些使用构造器创建了的SWT对象。 2。dispose一个父组件会dispose掉所有的子组件。 由 此可以得知,由于Color,Cursor,Font,GC,Image,Printer,Region都是在DeviceData之上创建,所以如果使 用构造器的话,就必须要手工把这些资源dispose掉,而如果使用Font font = control.getFont ()这样的方式的话,就不可以调用font.dispose()方法,因为它不是被我们创建的。 还可以 ...
2007-03-06

使用Ant,Maven构建Eclipse RCP Product

关键字: RCP Ant Maven
通常我们打包Product的时候,一般都是通过Product的export操作来进行的,但这样的做法,则限制了Continous Integration的自动化执行,那么,应该如何编写自动化构建脚本呢? 一、首先,让我们看一下Eclipse官方的解决方案: http://help.eclipse.org/help32/index.jsp?topic=/org.eclipse.pde.doc.user/guide/tasks/pde_product_build.htm 从 文中我们可以看出,PDE已经为从product文件构建RCP应用做好了一切准备,我们所需要做的,就是搭建目 ...
在RCP产品中实现国际化,一般是两种方式。 方式一: public class Messages {     private static final String BUNDLE_NAME = "test.messages";        private static final ResourceB ...
为了给大家提供方便,我在这篇帖子里对常用的RCP参考资料作了一下简单的总结,有不当之处,还望多多批评指正。 1。入门 对于入门的RCP开发人员来讲,首先应当要对RCP有一个全局性的认识,reload_cn有一篇开源文档《RCP程序设计》,下载地址为:http://www.eclipseworld.org/bbs/read.php?tid=4457,这篇文档涵盖了RCP开发相关的许多知识点,是引导新手入门的好材料。 此外,对于RCP开发应用而言,最经典的书籍还当数《Eclipse Rich Client Platform: Designing, Coding, and Pack ...
2007-01-17

RCP中异步线程的处理

关键字: RCP 异步
在RCP中要在非UI线程中执行UI线程的操作,最简单的方式就是display.syncExec或者display.asyncExec,如果UI线程所需的时间较长的话,则应该使用display.asyncExec 在执行异步线程的时候,我们一般应当继承Job或者UIJob类:UIJob是在UI线程中运行的,可以直接访问窗体组件。Job是在非UI线程中运行,如果在里面想访问窗体组件,需要通过Display.asynExec()或者synExec方式来执行。UIJob要尽量的短,不要过多的占用UI线程的时间。 在我现在的系统中,每当UI需要和Server交互的时候,都需要检测Server ...
ViewerFilter主要用于根据条件来显示或隐藏Tree或Table中的数据,它的实现就不赘述了,在程序中用了一个下拉框来做触发条件:   filterCombo.addSelectionListener(new SelectionAdapter() {               @Override       & ...
我们知道,Title是在ApplicationWorkbenchWindowAdvisor里面通过   public void preWindowOpen() {        IWorkbenchWindowConfigurer configurer = getWindowConfigurer();        configurer.set ...
默认情况下,SWT的Table只会给整个Table设置Tooltip,要对每一个TableItem设置Tooltip的话,就要监听鼠标事件了:   table.addMouseTrackListener(new MouseTrackAdapter() {         public void mouseHover(MouseEvent event) {    &n ...
目的1:打开一个新的对话框时,如何设定它和父对话框的相对位置?比如在登录对话框有一个“创建新帐号”的按钮,用户点击以后,就出现新的对话框用于注册,请问如何能让新的对话框和旧对话框排列的整齐一些?应该是能设定二者的相对位置吧? 最开始,以为要用Shell.setLocation来设置,但是对于一个Dialog而言,它的Shell在什么时候才能初始化呢? 我 在构造函数里面,configureShell(Shell newShell)方法里面,Control createDialogArea(Composite parent)方法里面都调用过了this.getS ...
2006-10-16

用RCP做出漂亮的对话框

关键字: rcp 对话框
首先是一个效果图: 为了不违反保密协议,偶在这里把logo和相关的东西都涂掉了,希望不会让人觉得难看.... ok,下面就开始讲述偶的coding过程: 首先捏,Dialog是分为三部分的,Window Title Bar,Content Area和Button Bar 这里的Window Title Bar素很难改动滴,偶也米改....而接下来的ContentArea和ButtonBar因为素分成两截滴,所以就要把一张背景图片拆成两截,分别设置成ContentArea和ButtonBar的背景图片鸟~~~   protec ...
在IWorkbenchPreferenceConstants中有很多常量,用来配置preference settings,诸如: OPEN_NEW_PERSPECTIVE——打开新视图的方式 DOCK_PERSPECTIVE_BAR——锁定PerspectiveBar的位置 INITIAL_FAST_VIEW_BAR_LOCATION——表示fast view bar在一个fresh workspace中锁定的位置,This preference is meaningless after a workspace ...
需要以下的对象: LoginDialog,用于展示状态, LoginListener,用于监听登录状态,并根据不同的情况改变LoginDialog的显示 LoginAction,用于执行登录的业务逻辑,并且根据不同的结果来fire不同的动作。 状态一共有以下几种: 1。登录中 2。登录成功 3。登录失败   3.1 连接失败   3.2 用户名密码错误   3.3 ..... 4。用户取消登录 下面是代码片段: Application:   public class  ...
2006-09-21

使用JFace Viewer注意事项

关键字: rcp
如果使用了Eclipse3.2提供的自绘制功能来在table或者tree里面绘制图像或文字的时候,就必须在LabelProvider中,将对应column的返回值置空,同时需要记住的是,即使所有的column都使用自绘制功能的时候,也必须要给viewer提供一个LabelProvider,否则每一行的第一列上都会显示出对应Object的toString()方法的结果。
ModalessDialog: public class ModalessDialog extends Dialog {  public ModalessDialog(Shell arg0) {   super(arg0);   setShellStyle(SWT.SHELL_TRIM | SWT.MODELESS | SWT.RESIZE | SWT.MAX);  } } 程序中需要双击摄像头,然后弹出的对话框中显示摄像头所捕捉的画面,原来是这样写的:   deviceTab.getViewer().addDoubl ...
Design decisions: Most platforms require that widgets be created within the context of a specific parent, so SWT requires that a parent widget be supplied as one of its constructor arguments. Another requirement of many platforms is that certain style settings must be supplied at creation time ( ...
为了批量发布设备,需要在一个窗口中为设备命名,设定其类型等,要用到Combo,所以就用了CellEditor 用CellEditor还是很方便的,有CheckboxCellEditor,ComboBoxCellEditor,LabelCellEditor,TextCellEditor等等。 首先把TableColumn的名称做成String数组,调用viewer.setColumnProperties()方法 然后做一个CellEditor数组,数组中的每一个CellEditor都对应着每一个Column 然后实现ICellModifier接口,做一个自己的CellMo ...
EventHandler要抽象出一个接口来,然后根据不同的需要实现不同的handler,不然就无法在服务器reply以后通知UI更新,但至于是否要在UI中再生成异步线程来做这件事情,还要通过编码测试一下。 不过目前我的感觉是不需要再生成异步线程了,因为底层Peercore的操作本身就是异步的,不需要等待它的方法操作完毕以后再返回,应该只需要把UI中要更新的控件作为参数传到EventHandler里面去,这样handler就可以通知UI更新了——打住!RCP非UI的线程是无法操作UI线程的!!只能通过UIJob或者是Display.asnyexec()方法来更新U ...
dearwolf
搜索本博客
我的相册
E4ad347d-0c94-3e1b-b11c-cd60a6dbc8cc-thumb
sina
共 3 张
最近加入圈子
存档
最新评论