blob: 104ad3137d676aa1b6ff74edd4e41034abf249c5 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 IBM Corporation and others.
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// which accompanies this distribution, and is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// Contributors:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.library.services;
import org.eclipse.swt.widgets.Display;
/**
* a utility class to allow UI update with the valid UI thread.
*
* @author Jinhua Xi
* @since 1.0
*
*/
public abstract class SafeUpdateController {
/**
* sync execute the runnable with the valid UI thread.
* @param runnable Runnable
*/
public static void syncExec(Runnable runnable) {
try {
// since this will cause UI update, which must be executed in the UI
// thread
// otherwise, will cause Invalid Thread Access exception
Display display = Display.getCurrent();
if (display == null) {
display = Display.getDefault();
}
if (display == null) {
runnable.run();
} else {
display.syncExec(runnable);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* async execute the runnable with the valid UI thread.
* @param runnable Runnable
*/
public static void asyncExec(Runnable runnable) {
try {
// since this will cause UI update, which must be executed in the UI
// thread
// otherwise, will cause Invalid Thread Access exception
Display display = Display.getCurrent();
if (display == null) {
display = Display.getDefault();
}
if (display == null) {
runnable.run();
} else {
display.asyncExec(runnable);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}