亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

加入后 Eclipse 作業掛起 ui

加入后 Eclipse 作業掛起 ui

慕姐8265434 2023-08-16 10:19:57
我遇到這樣的情況,一旦項目復制完成,它就必須更改用戶界面。我創建了一個作業來復制項目并加入作業,以便在其完成之前不會修改用戶界面。但 ui 被掛起,直到復制操作完成。這是我的代碼private void copyItems(SelectDTO selection, TreeViewer viewer) {    try {        Job job = new Job("test") {            @Override            protected IStatus run(IProgressMonitor monitor) {                ISafeRunnable runnable = new ISafeRunnable() {                    @Override                    public void run() throws Exception {                    //copy items                    }                    @Override                    public void handleException(Throwable exception) {                    }                };                SafeRunner.run(runnable);                return Status.OK_STATUS;            }            @Override            public boolean belongsTo(Object family) {            }        };我已加入 addJobChangeListener 中的工作job.addJobChangeListener(new IJobChangeListener() {            @Override            public void sleeping(IJobChangeEvent event) {                // TODO Auto-generated method stub            }            @Override            public void scheduled(IJobChangeEvent event) {                // TODO Auto-generated method stub            }            @Override            public void running(IJobChangeEvent event) {                // TODO Auto-generated method stub            }            @Override            public void done(IJobChangeEvent event) {            }            @Override            public void awake(IJobChangeEvent event) {                // TODO Auto-generated method stub            }            @Override            public void aboutToRun(IJobChangeEvent event) {                // TODO Auto-generated method stub            }        });        job.schedule();        job.join();    } catch (Exception e) {    }}調用此方法后,我正在更新用戶界面。我可以做哪些改變來停止用戶界面的掛起?謝謝。
查看完整描述

1 回答

?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

別join這樣打電話。您正在計劃作業,然后立即等待它完成,這將阻塞 UI,直到作業結束。


您可以將代碼添加到done作業更改偵聽器的方法中,以便在作業完成時進行處理。


所以像這樣:


job.addJobChangeListener(new JobChangeAdapter()

   {

     @Override

     public void done(IJobChangeEvent event)

     {

       // TODO Your work here

     }

   });


job.schedule();

我在這里使用JobChangeAdapter而不是IJobChangeListener直接使用,因為它提供了您不需要使用的方法的默認實現。


Display.asyncExec另一種方法是在代碼中使用來Job在 UI 線程中運行某些代碼。


查看完整回答
反對 回復 2023-08-16
  • 1 回答
  • 0 關注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號