Tengo una aplicación Java que usa SWT como kit de herramientas, y me estoy cansando de todo el horrible código de la placa de la caldera que se necesita para actualizar un elemento GUI.Java SWT: envolviendo syncExec y asyncExec para limpiar el código
Sólo para poner un botón de discapacitados que se habilite tengo que pasar por algo como esto:
shell.getDisplay().asyncExec(new Runnable() {
public void run() {
buttonOk.setEnabled(true);
}
});
prefiero mantener mi código fuente tan plano como me sea posible, pero necesito la friolera de 3 niveles de sangría solo para hacer algo simple.
¿Hay alguna forma de que pueda envolverlo? Me gustaría una clase como:
public class UIUpdater {
public static void updateUI(Shell shell, *function_ptr*) {
shell.getDisplay().asyncExec(new Runnable() {
public void run() {
//Execute function_ptr
}
});
}
}
y se puede utilizar de esta manera:
UIUpdater.updateUI(shell, buttonOk.setEnabled(true));
Algo como esto sería ideal para ocultar esa horrible SWT desorden parece pensar que es necesario hacer nada.
Según tengo entendido, Java no puede hacer punteros a las funciones. Pero Java 7 tendrá algo llamado Closures, que debería ser lo que yo quiero. Pero, mientras tanto, ¿hay algo que pueda hacer para pasar un puntero de función o devolución de llamada a otra función para que se ejecute?
Como acotación al margen, estoy empezando a pensar que sería la pena el esfuerzo para hacer de nuevo esta aplicación en Swing, y yo no tengo que aguantar esto fea basura y no cruzada platformyness de SWT.
espero que sepas, que Swing es un único subproceso también. Por lo tanto, debe hacer lo mismo que en SWT para actualizar un elemento GUI de otro hilo. La única diferencia es que Swing no lanza una excepción cuando llama a los métodos Swting del hilo equivocado. Pero verá los errores de mayn weired en su aplicación cuando lo haga incorrecto. –