/**
* Copyright (c) 2009-2011, The HATS Consortium. All rights reserved.
* This file is licensed under the terms of the Modified BSD License.
*/
package abs.backend.java.utils;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import javax.swing.SwingUtilities;
public class SwingWrapperProxy implements InvocationHandler {
final Object target;
public SwingWrapperProxy(Object target) {
this.target = target;
}
@Override
public synchronized Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
method.invoke(target, args);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
});
return null;
}
public static <V> V newInstance(V target, Class<?> interfce) {
return (V) Proxy.newProxyInstance(SwingWrapperProxy.class.getClassLoader(), new Class[] { interfce },
new SwingWrapperProxy(target));
}
}