gpt4 book ai didi

java - 如何在 Eclipse 插件中使用 Timer 和 SwingWorker?

转载 作者:行者123 更新时间:2023-12-01 11:26:47 26 4
gpt4 key购买 nike

我正在开发一个 Eclipse 插件,它将为带有 View 的 GUI 做出贡献。

当用户在工作区中选择文件夹或文件时, View 会使用版本控制系统中的信息进行更新。

为了避免每次用户浏览项目子文件夹和文件时都收集数据,我需要等待 3 秒钟才能确保该文件或文件夹是感兴趣的文件或文件夹。

我目前正在使用 Swing Timer 执行此操作。

对于少量数据来说这是可以的,但是对于大量数据GUI会阻塞,等待计时器执行更新函数。

我知道对于这种类型的任务,我可以使用 SwingWorker,但我不知道如何延迟任务并在需要时重新启动延迟。

谁能给我一个如何正确解决这个问题的解决方案?

这是我当前的代码:

  public void resetTimerIfNeeded()
{
if(timer.isRunning())
timer.restart();
else
timer.start();
}


public void timer()
{
selectionTimer = new Timer(3000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub


Display.getDefault().syncExec(new Runnable(){
@Override
public void run()
{
updateView();
selectionTimer.stop();
}
});
}
});
}

最佳答案

由于 Eclipse 使用 SWT 而不是 Swing,因此最好避免使用 Swing 代码。

您可以使用 UIJob 在延迟后在 UI 线程中运行代码,如下所示:

UIJob job = new UIJob("Job title") {
@Override
public IStatus runInUIThread(IProgressMonitor monitor) {

updateView();

return Status.OK_STATUS;
}
};

job.schedule(3000);

或者您可以使用Display.timerExec:

Display.getDefault().timerExec(3000, new Runnable(){
@Override
public void run()
{
updateView();
}
});

关于java - 如何在 Eclipse 插件中使用 Timer 和 SwingWorker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30758281/

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