rcp 界面刷新

本文介绍在Eclipse RCP环境下使用Socket进行通信时遇到的问题及解决方案,特别是在多线程下更新UI组件所遇到的挑战,并提出了一种通过后台线程与UIJob相结合的方式来实时更新UI的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近有不少的事情,没有坚持写博客,今晚心还是没有静下来,不过还是把一些这段时间的工作和学习的经验写下来与大家分享。


最近在使用eclipse的rcp作为平台在做一些工具类的应用。其中有一些就是要使用socket来监听服务端socket的返回消息,同时接受socket服务端的广播消息。


最后显示在rcp对话框的一个text组件中,刚开始觉得很简单,直接对socket的DataInputStream使用线程,在新的线程中使用while(true)来不停的dins.readUTF(),


然后在此循环中使用 text.setText(str),同时在启动线程的地方先把此线程设置为后台线程,以为这样就可以了,然后保存运行,客户端发送消息接着报错了,错误


提示socket datainputstream线程不可以操作display所在的线程。

此时一片茫然,不知为啥,经过初步的研究发现,其实rcp的界面是在display的一个线程中,其他线程不可以对rcp中的组件做更改,也就是说必须在一个display线程中,


由于我的这个需求有点不同,就是必须要有个死循环来不停的读socket服务端是否广播了消息,如果广播了就要接受然后展示,也就是说无法把此代码实现放到eclipse rcp自


带的display.asynexec()中,同时由于对rcp界面元素的刷新尽量要放到job中,而对于ui界面的,尽量放至uijob中。


此时想到了个曲线救国的道路,我们为了不直接修改rcp的界面元素,我们可以把socket datainputstream线程读取的信息放到一个成员变量中,然后我们在UIJOB中设置


text组件的内容(setText),而对于线程的启动我们可以在display所在界面类中定义一个定时任务,使用定时任务来无限的启动这个job,果然,通过这样的设计成功的实现


了对rcp组件内容的刷新。


就写到这里吧,不知道各位有没有遇到此类问题,欢迎指正给出更好的解决办法。有时间写一下flex中的关于弹出框的一些注意点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值