Eclipse RCP 开发:从登录对话框说开去

本文探讨了在Eclipse RCP应用中如何正确实现登录对话框,避免程序失去响应。通过理解GUI线程和非GUI线程的概念,作者解决了在工作台窗口启动前显示登录对话框的问题,并分享了错误尝试与解决方案,强调了在GUI线程内构建事件循环的重要性。
摘要由CSDN通过智能技术生成

以前我写过一系列的关于Eclipse RCP编程的文章,内容包含了从RCP入门到高级的OpenGL编程。而且我坚信,RCP编程会越来越流行。如果大家需要从头了解RCP,可以看我以前的文章:
使用Eclipse RCP进行桌面程序开发(一):快速起步
使用Eclipse RCP进行桌面程序开发(二):菜单、工具栏和对话框
使用Eclipse RCP进行桌面程序开发(三):视图和透视图
使用Eclipse RCP进行桌面程序开发(四):在Windows中使用Active X控件
使用Eclipse RCP进行桌面程序开发(五):2D绘图
使用Eclipse RCP进行桌面程序开发(六):向OpenGL进军

在今天的这篇文章里,我要和大家探讨的是登录对话框,不要小看这个对话框,虽然SWT和JFace里面提供了很好用的对话框基类,但是如果你不理解SWT中GUI线程和非GUI线程的概念,那么你依然难以达到你想要的效果。具体什么情况呢?这要从我最近接的一个项目说起。

有人委托我做一个药店管理系统,这种系统属于进销存管理系统的范畴,理论上讲没有什么难度,可供选择的开发工具有很多,最主流的当然要数Visual C++和VB、Delphi,如果偷一点懒,选择Office中的Access开发也很简单,但是为了挑战自己,我决定选择Eclipse RCP来写这个程序,Eclipse RCP开发的程序界面很漂亮,但是Eclipse RCP很复杂,稍有不慎就会陷入Bug的泥沼,严重延误工期。这不,一开始就碰到了对话框的难题。

我的本意是在打开工作台窗口前,先打开一个用户登录的对话框,如果用户登录成功,则关闭对话框,打开工作台窗口。使用Eclipse的向导创建了项目之后,很快我就决定在Application类中实现该功能。我的代码如下,只列出Application类中的start方法:

public  Object start(IApplicationContext context) {
        Display display 
=  PlatformUI.createDisplay();
        
        
// 下面是我的代码
        LoginDialog loginDialog  =   new  LoginDialog();
        
// 我的代码结束
        
        
try  {
            
int  returnCode  =  PlatformUI.createAndRunWorkbench(display,  new  ApplicationWorkbenchAdvisor());
            
if  (returnCode  ==  PlatformUI.RETURN_RESTART) {
                
return  IApplication.EXIT_RESTART;
            }
            
return  IApplication.EXIT_OK;
        } 
finally  {
            display.dispose();
        }
    }

我的本意是只弹出登录对话框,登录对话框关闭后才出现工作台窗口,可是事实证明,即使登录等话框不关闭,也不会影响工作台窗口的创建,效果如下图:
001.jpg

即使我自己加入阻塞代码也不行,我先加入的代码如下:

public  Object start(IApplicationContext context) {
        Display display 
=  PlatformUI.createDisplay();
        
        
// 下面是我的代码
        LoginDialog loginDialog  =   new  LoginDialog();
        
while ( ! loginDialog.getSShell().isDisposed()){
            
try
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值