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

推荐订阅源

U
Unit 42
N
News and Events Feed by Topic
S
Schneier on Security
G
GRAHAM CLULEY
Scott Helme
Scott Helme
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
GbyAI
GbyAI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
C
CERT Recently Published Vulnerability Notes
T
The Exploit Database - CXSecurity.com
C
Cisco Blogs
T
The Blog of Author Tim Ferriss
Cisco Talos Blog
Cisco Talos Blog
P
Privacy & Cybersecurity Law Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 司徒正美
Blog — PlanetScale
Blog — PlanetScale
Project Zero
Project Zero
MyScale Blog
MyScale Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
The Last Watchdog
The Last Watchdog
Vercel News
Vercel News
The Cloudflare Blog
C
Check Point Blog
Help Net Security
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
AI
AI
Simon Willison's Weblog
Simon Willison's Weblog
云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
Stack Overflow Blog
Stack Overflow Blog
腾讯CDC
NISL@THU
NISL@THU
S
Security @ Cisco Blogs
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
S
SegmentFault 最新的问题
MongoDB | Blog
MongoDB | Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
AWS News Blog
AWS News Blog
Cloudbric
Cloudbric
N
News and Events Feed by Topic
PCI Perspectives
PCI Perspectives
S
Securelist
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Vulnerabilities – Threatpost
S
Secure Thoughts

博客园 - 刘刚

Google Map [导入]Editor中嵌入Editor [导入]GEF中修改默认的FeedBack [导入](接上篇)关于GEF Feedback的补充 [导入]GEF中导视图的使用 [导入]修改GEF中Connection的端点 [导入]Eclipse中Job API使用总结如下二 [导入]Eclipse中Job API使用总结如下一 [导入]Eclipse调试框架的学习与理解二 [导入]Eclipse调试框架的学习与理解一 [导入]使用JET自动生成代码 [导入]定义自己的Common Navigator三 [导入]定义自己的Common Navigator二 [导入]定义自己的Common Navigator一 [导入]Eclipse运行(launcher)框架三 [导入]Eclipse运行(launcher)框架二 [导入]Eclipse运行(launcher)框架一 [导入]Eclipse属性页的支持 [导入]GEF理解系列九
[导入]Eclipse中Job API使用总结如下三
刘刚 · 2008-01-10 · via 博客园 - 刘刚

网站: JavaEye  作者: liugang594  链接:http://liugang594.javaeye.com/blog/154925  发表时间: 2008年01月10日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

1. 使用job的一个好处就是可以在后台运行。

但是如果不给用户于提示的话,很多时候会让用户很困惑,这就有必要增加回显。上面又说了,提供回显会增加复杂性。下面就是解决这个问题的方案!记得在第一部分,说过一个job有三个级别:systemuserdefault。只要不是system级的,就会有回显给用户。最常见的就是工作台右下角的进度显示:

图一

如果是用户级的,进一步,我们可以有一个进度对话框:

图二

用户级时,如果用户没有选择在后台运行,那么很容易判断工作完成,因为对话框会关闭。但是如果运行了在后台运行,或者是缺省级的,那又怎么办呢?当然最简单的,我们可以在progress view里查看:

图三

但是不能期待用户总是盯着这个看。这里给出解决方案,我们让工作台记住我们完成的结果,当点击图标时会弹出这个结果,示例如下:

首先定义这个job 

Job job = new Job("Online Reservation") {

    protected IStatus run(IProgressMonitor monitor) {

       // Make a reservation

       // ...

           setProperty(IProgressConstants.ICON_PROPERTY, Activator                 .getImageDescriptor("icons/sample.gif"));

           if (isModal(this)) {

                 // The progress dialog is still open so

            // just open the message

            showResults();

       } else {             setProperty(IProgressConstants.KEEP_PROPERTY, Boolean.TRUE);       setProperty(IProgressConstants.ACTION_PROPERTY,                    getReservationCompletedAction());

       }

           return Status.OK_STATUS;

    }

};

job.setUser(true);

job.schedule();

 isModel()方法如下:

   public boolean isModal(Job job) {

       Boolean isModal = (Boolean) job

       .getProperty(IProgressConstants.PROPERTY_IN_DIALOG);

       if (isModal == null)

           return false;

       return isModal.booleanValue();

}

getReservationCompletedAction()方法如下:  
  protected static Action getReservationCompletedAction() {

       return new Action("View reservation status") {

           public void run() {

       MessageDialog.openInformation(Display.getDefault()

.getActiveShell(), "Reservation Complete",

"Your reservation has been completed");

           }

       };

}

showResults()方法如下:   
 protected static void showResults() {

       Display.getDefault().asyncExec(new Runnable() {

           public void run() {

              getReservationCompletedAction().run();

           }

       });

}

更多的用法,可以参见job的帮助和IProgressConstants常量的用法!这里当使用对话框等待时,当任务结束后,信息对话框弹出有问题!有一个非法管理状态异常!大家可以试试!最后运行结果大致如下:

图四

OK出现对话框!

2. job进行分组。

有可以多个job都同属于一个逻辑任务,这时可以对这些job进行分组,使用job的如下方法:setProgressGroup()具体的看job的帮助!

3. 保护数据的完整性

上面介绍的都是一些互斥访问的实现,没有讲到数据完整性的保护!在eclipseorg.eclispe.core.runtime插件中提供了一种锁的机制,用来保护数据在被操作时不会被打断。使用方式如下:

private static ILock lock = Platform.getJobManager().newLock();

     try {
        lock.acquire();
        // Access or modify data structure
     } finally {
        lock.release();
     }
 

 注意,try-finally块是必须的,用于确保在任何时候锁都能够被释放!这里也提示一下,在请求资源锁时,也应该做同样的事情!  好,以上就是所有的总结的内容!
本文的讨论也很精彩,浏览讨论>>

JavaEye推荐

文章来源:http://liugang594.javaeye.com/blog/154925