惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
C
Check Point Blog
B
Blog RSS Feed
Y
Y Combinator Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
A
About on SuperTechFans
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 聂微东
阮一峰的网络日志
阮一峰的网络日志
人人都是产品经理
人人都是产品经理
小众软件
小众软件
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
GbyAI
GbyAI
The Cloudflare Blog
博客园 - 叶小钗
S
SegmentFault 最新的问题
博客园 - Franky
Engineering at Meta
Engineering at Meta
F
Fortinet All Blogs
B
Blog
Jina AI
Jina AI

博客园 - Allen Young

如何使用Eclipse中对Web Browser的支持 从流氓说开去 小试org.eclipse.jface.dialogs.TitleAreaDialog 如何在Eclipse PDE的Error Log View中显示自己的Log 如何在自己编写的Plugin中使用第三方jar 如何在程序中设置Hibernate Configuration的Property 在线IM工具,我们能够信任你吗? Comet: Low Latency Data for the Browser 顾城 - 我是一个任性的孩子 Links for 2006/8/14 在Liferay Portal中使用DWR Links for 2006/8/9 What's new in Spring 2.0? 也谈“轮子理论” 后续 也谈“轮子理论” 道德的起源 What's New in Eclipse 3.2 Java Development Tools Ten things programmers might want to know about marketers Callisto的闹剧
如何在SWT中使鼠标的状态变成忙碌
Allen Young · 2006-10-05 · via 博客园 - Allen Young

Platform: Eclipse 3.2

Eclipse Plug-in开发离不开与用户的交互,我们往往把用户的鼠标点击之类动作所调用的代码包装成一个Action。例如,如果用户点击了一个Menu Item,那么绑定到这个Menu Item上的Action就会运行,这一切都很直观。但是有的时候,用户触发的操作可能需要很长时间才能完成,比如连接数据库,在这种情况下,就必须把鼠标的状态改为忙碌,这样就可以用沙漏手势提示用户当前操作正在进行,也避免了用户在等待当前操作的时候又去触发其他的操作。那么如何实现这一点呢?Eclipse有一个High-level的实现,也有一个Low-level的实现。因为后者非常简单,而且在大多数情况下也能满足需求,所以这里会介绍后者。

我们可以在org.eclipse.swt.custom包中找到一个BusyIndicator类,它的Java Doc说得好:Support for showing a Busy Cursor during a long running process。该类只有一个static的方法,让我们来看看它的签名:

public static void showWhile(Display display, Runnable runnable)


其中,display参数指定了Busy Cursor应该显示在哪里,如果传入null,则默认使用当前线程的当前Display;runnable就是封装了我们要执行的操作的对象。这个方法会执行runnable中的操作,同时显示Busy Cursor,当runnable结束后,鼠标的状态就会恢复为正常。OK,让我们来看一个例子:

public class DoubleClickTreeNodeAction extends Action {/*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.action.Action#run()
     
*/
    
public void run() {
       
// get Display from your own plug-in
        BusyIndicator.showWhile(Activator.getDefault().getWorkbench()
                .getDisplay(), 
new Runnable() {
            
public void run() {
                performAction();
            }
        });
    }
private void performAction() {
        
// connecting to database...
    }

}


怎么样,是不是很简单呢?