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

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

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

    邋遢居

    我的Java天堂

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      61 Posts :: 2 Stories :: 90 Comments :: 0 Trackbacks

    大家肯定都知道在Eclipse中獲得當(dāng)前活動(dòng)的workbenchWindow可以采用如下的方式來完成。

    PlatformUI.getWorkbench().getActiveWorkbenchWindow()

    Plugin類中) getDefault().getWorkbench().getActiveWorkbenchWindow() 。一般情況下這兩個(gè)方式能夠很好的工作。但是突然有一天發(fā)現(xiàn)他不能工作了。郁悶我都不行了。察看了一下變量如下圖display.jpg

    這個(gè)activatedWindow明明有啊,怎么就取不到呢。

    打開代碼一看,看到 org.eclipse.ui.internal.Workbench 類中的 getActiveWorkbenchWindow 方法。

    public ?IWorkbenchWindow?getActiveWorkbenchWindow()?{
    ????????
    // ?Return?null?if?called?from?a?non-UI?thread.
    ????????
    // ?This?is?not?spec'ed?behaviour?and?is?misleading,?however?this?is?how
    ????????
    // ?it
    ????????
    // ?worked?in?2.1?and?we?cannot?change?it?now.
    ????????
    // ?For?more?details,?see?[Bug?57384]?[RCP]?Main?window?not?active?on
    ????????
    // ?startup
    ???????? if ?(Display.getCurrent()? == ? null )?{
    ????????????
    return ? null ;
    ????????}

    ????????
    // ?Look?at?the?current?shell?and?up?its?parent
    ????????
    // ?hierarchy?for?a?workbench?window.
    ????????Control?shell? = ?display.getActiveShell();
    ????????
    while ?(shell? != ? null )?{
    ????????????Object?data?
    = ?shell.getData();
    ????????????
    if ?(data? instanceof ?IWorkbenchWindow)?{
    ????????????????
    return ?(IWorkbenchWindow)?data;
    ????????????}
    ????????????shell?
    = ?shell.getParent();
    ????????}

    ????????
    // ?Look?for?the?window?that?was?last?known?being
    ????????
    // ?the?active?one
    ????????WorkbenchWindow?win? = ?getActivatedWindow();
    ????????
    if ?(win? != ? null )?{
    ????????????
    return ?win;
    ????????}

    ????????
    // ?Look?at?all?the?shells?and?pick?the?first?one
    ????????
    // ?that?is?a?workbench?window.
    ????????Shell?shells[]? = ?display.getShells();
    ????????
    for ?( int ?i? = ? 0 ;?i? < ?shells.length;?i ++ )?{
    ????????????Object?data?
    = ?shells[i].getData();
    ????????????
    if ?(data? instanceof ?IWorkbenchWindow)?{
    ????????????????
    return ?(IWorkbenchWindow)?data;
    ????????????}
    ????????}

    ????????
    // ?Can't?find?anything!
    ???????? return ? null ;
    ????}

    程序跑到 Display.getCurrent() 這一絕句就給我掉鏈子(返回了一個(gè) null )。就是他,就是他了!到網(wǎng)上 google 了一下。看看在什么狀況下他會(huì)返回一個(gè) null. http://wiki.eclipse.org/index.php/FAQ_How_do_I_get_a_Display_instance%3F 找到了。

    他說, Display 永遠(yuǎn)和創(chuàng)建他的線程聯(lián)系在一起,并且一個(gè)線程擁有一個(gè)活動(dòng)的 Display 。在創(chuàng)立 Display 的線程中可可以通過 Display.getCurrent() 獲得當(dāng)前活動(dòng)的 Display 。如果出了這個(gè)線程就看不到這個(gè) Display 了。如果有的線程不擁有 Display ,那它的 Display.getCurrent() 就只能得到 null 了。

    回頭看了一下我的代碼,我是在新建的線程中啟動(dòng)了調(diào)用了這個(gè)方法。難怪他不給面子呢!


    參考文獻(xiàn):

    http://wiki.eclipse.org/index.php/FAQ_How_do_I_get_a_Display_instance%3F

    http://help.eclipse.org/help31/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/widgets/Display.html

    posted on 2006-12-04 15:01 Jet Geng 閱讀(2669) 評(píng)論(0)  編輯  收藏 所屬分類: Eclipse
    主站蜘蛛池模板: 黄色毛片免费在线观看| 久久国产乱子精品免费女| 国产自偷亚洲精品页65页| 免费一看一级毛片人| 在线观看片免费人成视频播放| 亚洲精品综合久久中文字幕| 国产又黄又爽又猛的免费视频播放| 中文字幕乱码系列免费| 亚洲成a人片毛片在线| 亚洲AV日韩精品一区二区三区| 久久亚洲私人国产精品| 国产免费拔擦拔擦8x| 久久久久国色av免费看| 韩国亚洲伊人久久综合影院| 亚洲a在线视频视频| 免费一级e一片在线播放| 波多野结衣免费在线| 两个人看的www免费视频中文| 亚洲综合色区中文字幕| 日韩亚洲人成在线综合日本| 四虎影在线永久免费四虎地址8848aa| 日韩免费无码视频一区二区三区| 国产亚洲视频在线| 亚洲av永久综合在线观看尤物| 亚洲色偷偷综合亚洲AV伊人| 天天天欲色欲色WWW免费| 精品无码无人网站免费视频 | 亚洲卡一卡2卡三卡4卡无卡三| 国产在线观看免费不卡| h视频在线观看免费网站| 国产又黄又爽胸又大免费视频| 亚洲爆乳少妇无码激情| 亚洲人成777在线播放| 亚洲人成电影在线天堂| 国产精品亚洲产品一区二区三区 | 深夜福利在线视频免费| 亚洲最大天堂无码精品区| 亚洲综合男人的天堂色婷婷| 亚洲区小说区激情区图片区| 亚洲国产精品一区二区第一页免 | 日本系列1页亚洲系列|