<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    很久很久以前

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      34 隨筆 :: 4 文章 :: 17 評論 :: 0 Trackbacks
    轉(zhuǎn)載地址:        }
         });
      job.setSystem(true);
         job.schedule(); // start as soon as possible

    monitor是一個進(jìn)度顯示條,它會在運行job時自動顯示,如果任務(wù)成功運行完成,返回Status.OK_STATUS,如果中途被用戶在進(jìn)度顯示條那里中斷,就返回Status.CANCEL_STATUS.上面schedule(60000);它是讓job每過1小時就自動運行,Job又一個非常強(qiáng)大的功能.
    然后后面是可以給job添加監(jiān)聽器.
    job.setSystem(true);這一句是把這個job設(shè)置為系統(tǒng)級別的.如果調(diào)用setUser(true),那么就被定義為用戶級別的,用戶級別和默認(rèn)級別的job
            在運行時會以UI形式反映出來,如果是用戶job,那么會彈出一個進(jìn)度顯示窗口,能讓用戶選擇在后臺里運行.
    下圖是一個job自動運行時的效果:

    按此在新窗口打開圖片
    再介紹job常常用到的一個方法Job#join().
    系統(tǒng)調(diào)用到某個job,調(diào)用它的run()方法:
    再看下面這個例子:

        class TrivialJob extends Job {
          public TrivialJob() {
             super("Trivial Job");
          }
          public IStatus run(IProgressMonitor monitor) {
             System.out.println("This is a job");
             return Status.OK_STATUS;
          }
       }
       
       job的創(chuàng)建和計劃如下所示:

       TrivialJob job = new TrivialJob();
       System.out.println("About to schedule a job");
       job.schedule();
       System.out.println("Finished scheduling a job");
       
       他們的執(zhí)行是和時間沒關(guān)系的,輸出可能如下:
       About to schedule a job
       This is a job
       Finished scheduling a job

    也可能是:

       About to schedule a job
       Finished scheduling a job
       This is a job
       

       如果希望某個job運行完成后在繼續(xù)時,可以使用join()方法.
       join()會一直阻塞到該job運行完.
       
    例子:
       TrivialJob job = new TrivialJob();
       System.out.println("About to schedule a job");
       job.schedule();
       job.join();
       if (job.getResult().isOk())
          System.out.println("Job completed with success");
       else
          System.out.println("Job did not complete successfully");

    上面的代碼執(zhí)行后,輸出應(yīng)該就是這樣:

       About to schedule a job
       This is a job
       Job completed with success

    Job的功能是很強(qiáng)大的,還有很多功能我以后會介紹,也可以查閱官方幫助文檔.這里先把幾個常用的問題解決掉.
    參見:
    http://help.eclipse.org/help30/index.jsp?topic=/or...doc.isv/guide/runtime_jobs.htm

    3.如果在Job中加上改變UI的代碼就會失敗.
    原因如下:
    如果是在非UI線程中調(diào)用UI,SWT就會拋出一個SWTException.
    要在一個非UI線程改變UI的話有幾種技術(shù):

    第一種,用:
    Display#syncExec(Runnable)或
    Diaplay#asyncExec(Runnable)

    第二種:
    已經(jīng)開發(fā)了另外一種Job,就是UIJob,可以直接在它里面運行改變UI的代碼,其實它就是在SWT的asyncExec()方法里運行的.所有繼承UIJob的類應(yīng)

    該覆寫runInUIThread方法而不是run方法.

    3.關(guān)于進(jìn)度顯示
    在Jface中:
    org.eclipse.jface.operations包定義了一些接口用來在進(jìn)度條下運行長時間的任務(wù).
    可以參見:
    http://help.eclipse.org/help30/index.jsp?topic=/org.....isv/guide/jface_operations.htm

    在eclipse插件和RCP開發(fā)中:
    用戶級別的job是互操作性最強(qiáng)的,它不僅能夠讓用戶用Cancel鍵取消job,而且可以在Detail中展示具體情況,但是注意:
    Detail只會在下面兩種方法中出現(xiàn):
    IProgressService#busyCursorWhile或
    IProgressService#runInUI
    1)IProgressService#busyCursorWhile的用法例子:
    注意這里的run()中做些和UI無關(guān)的事.
    IProgressService progressService = PlatformUI.getWorkbench().getProgressService();
       progressService.busyCursorWhile(new IRunnableWithProgress(){
          public void run(IProgressMonitor monitor) {
             //do non-UI work
          }
       });
    效果:
    按此在新窗口打開圖片
    2)IProgressService#runInUI的用法例子:
    注意這里的run()中可以做些和UI有關(guān)的事.
    progressService.runInUI(
          PlatformUI.getWorkbench().getProgressService(),
          new IRunnableWithProgress() {
             public void run(IProgressMonitor monitor) {
                //do UI work
             }
          },
          Platform.getWorkspace().getRoot());
    效果:
    按此在新窗口打開圖片
    這里最后一個參數(shù)可以是null,或者是這個操作的規(guī)則,在這里我們是設(shè)定運行這個UI操作時鎖定工作臺.
    更加具體的可以參見:
    http://help.eclipse.org/help30/index.jsp?topic=/or...c.isv/guide/workbench_jobs.htm

    另外,有少數(shù)時候,我們不想彈出一個進(jìn)度條窗口,而是只在最底下的狀態(tài)欄顯示就可以了,很簡單,寫自己的Job類時,在構(gòu)造方法里加上一句:
    setUser(false);就可以了.
    posted on 2006-02-18 15:31 Long Long Ago 閱讀(294) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 全免费a级毛片免费看| 综合一区自拍亚洲综合图区| 美女被cao网站免费看在线看| 亚洲精品成人区在线观看| 亚洲av无码成人精品国产 | 啊v在线免费观看| 亚洲老熟女五十路老熟女bbw| 卡1卡2卡3卡4卡5免费视频| 亚洲中文精品久久久久久不卡| 最近最新的免费中文字幕| 亚洲国产精品无码久久久秋霞1| 在线观看人成视频免费| 在线亚洲v日韩v| 亚洲片国产一区一级在线观看| 皇色在线免费视频| 亚洲大尺度无码专区尤物| 色猫咪免费人成网站在线观看| 77777_亚洲午夜久久多人| 欧美三级在线电影免费| 精品久久亚洲一级α| 亚洲人成国产精品无码| 久久免费视频网站| 亚洲国产日韩在线人成下载| 成人免费视频观看无遮挡| 看一级毛片免费观看视频| 亚洲深深色噜噜狠狠爱网站| 曰批全过程免费视频网址| 亚洲熟妇无码一区二区三区导航| 四虎1515hm免费国产| 国产免费网站看v片在线| 亚洲福利一区二区三区| 四虎永久精品免费观看| 永久免费不卡在线观看黄网站| 亚洲国产高清视频在线观看| 国产在线不卡免费播放| 毛片在线播放免费观看| 国产亚洲欧美日韩亚洲中文色 | 亚洲国产精品久久久久| 成人免费无码大片a毛片软件 | 成年女人免费视频播放体验区| 日本一区二区三区免费高清在线|