gpt4 book ai didi

java - 加入后 Eclipse 作业挂起 ui

转载 作者:行者123 更新时间:2023-12-02 00:27:57 25 4
gpt4 key购买 nike

我遇到这样的情况,一旦项目复制完成,就必须更改用户界面。我创建了一个作业来复制项目并加入作业,以便在其完成之前不会修改用户界面。但 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) {

}
}

调用此方法后,我正在更新用户界面。我可以做哪些改变来停止用户界面的挂起?谢谢。

最佳答案

不要这样调用join。您正在计划作业,然后立即等待它完成,这将阻塞 UI,直到作业结束。

您可以将代码添加到作业更改监听器的 done 方法中,以便在作业完成时进行处理。

所以类似:

job.addJobChangeListener(new JobChangeAdapter()
{
@Override
public void done(IJobChangeEvent event)
{
// TODO Your work here
}
});

job.schedule();

我在这里使用了 JobChangeAdapter,而不是直接使用 IJobChangeListener,因为它提供了您不需要使用的方法的默认实现。

另一种方法是在 Job 代码中使用 Display.asyncExec 在 UI 线程中运行一些代码。

关于java - 加入后 Eclipse 作业挂起 ui,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58039303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com