浏览 3540 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-03-29
自己在实现的时候主要遇到了两个问题: 1.如果监视线程使用非UI线程,则不能去访问剪贴板 2.如果监视线程使用UI线程,则该线程将导致界面阻塞 我找到了两个解决的办法: 1.使用UIJob UIJob job = new UIJob("ClipBoardMonitorUIJob") { @Override public IStatus runInUIThread(IProgressMonitor monitor) { String textData = (String) clipboard.getContents(textTransfer); if (!StringUtils.isEmpty(textData) && !textData.equals(last)) { last = textData; notifyListeners(last); System.out.println("剪贴板改变" + last); } if (run) this.schedule(INTERVAL); return Status.OK_STATUS; } }; 在这个UIJob中自动的启动下一次对剪贴板的查询,因为都是在UI线程中执行,所以不会产生UI线程访问的问题。在UIJob结束时计划下一次执行的时间。 2.使用线程 public void checkClipBoard() { display.asyncExec(new Runnable() { public void run() { String textData = (String) clipboard.getContents(textTransfer); if (!StringUtils.isEmpty(textData) && !textData.equals(last)) { last = textData; notifyListener(last); System.out.println("剪贴板改变" + last); } } }); } public void run() { while (run && !this.isInterrupted()) { checkClipBoard(); try { Thread.sleep(5000); } catch (Exception e) { run = false; } } } 在线程中使用Display.asyncExec或者Display.syncExec执行检查剪贴板的操作。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |