Eclipse插件开发-刷新无效解决办法

 如获取项目文件夹路径后,刷新项目文件夹无效解决办法:


private void refreshProject(IResource resource) throws CoreException{

		refreshResource(resource,new SubProgressMonitor(new IProgressMonitor() {
			
			@Override
			public void worked(int work) {
				
			}
			
			@Override
			public void subTask(String name) {
				
			}
			
			@Override
			public void setTaskName(String name) {
				
			}
			
			@Override
			public void setCanceled(boolean value) {
				
			}
			
			@Override
			public boolean isCanceled() {
				return false;
			}
			
			@Override
			public void internalWorked(double work) {
			}
			
			@Override
			public void done() {
				
			}
			
			@Override
			public void beginTask(String name, int totalWork) {
				
			}
		}, 1000));
	}
	
	
	
	private void refreshResource(IResource resource, IProgressMonitor monitor)
			throws CoreException {
		if (resource.getType() == IResource.PROJECT) {
			checkLocationDeleted((IProject) resource);
		} else if (resource.getType() == IResource.ROOT) {
			IProject[] projects = ((IWorkspaceRoot) resource).getProjects();
			for (int i = 0; i < projects.length; i++) {
				checkLocationDeleted(projects[i]);
			}
		}
		resource.refreshLocal(IResource.DEPTH_INFINITE, monitor);
	}
	
	private void checkLocationDeleted(IProject project) throws CoreException {
		if (!project.exists()) {
			return;
		}
		IFileInfo location = IDEResourceInfoUtils.getFileInfo(project.getLocationURI());
		if (!location.exists()) {
			String message = NLS.bind(
					IDEWorkbenchMessages.RefreshAction_locationDeletedMessage,
					project.getName(), location.toString());

			final MessageDialog dialog = new MessageDialog(getShell(),
					IDEWorkbenchMessages.RefreshAction_dialogTitle, // dialog
					// title
					null, // use default window icon
					message, MessageDialog.QUESTION, new String[] {
							IDialogConstants.YES_LABEL,
							IDialogConstants.NO_LABEL }, 0) {
				protected int getShellStyle() {
					return super.getShellStyle() | SWT.SHEET;
				}
			}; // yes is the
			// default

			// Must prompt user in UI thread (we're in the operation thread
			// here).
			getShell().getDisplay().syncExec(new Runnable() {
				public void run() {
					dialog.open();
				}
			});

			// Do the deletion back in the operation thread
			if (dialog.getReturnCode() == 0) { // yes was chosen
				project.delete(true, true, null);
			}
		}
	}


你可能感兴趣的:(Eclipse插件开发-刷新无效解决办法)