Ho un'applicazione Java che utilizza SWT come toolkit e mi sto stancando di tutto il brutto codice della piastra della caldaia necessario per aggiornare un elemento della GUI.SWT Java: wrapping syncExec e asyncExec per ripulire il codice
Solo per impostare un pulsante disattivato per essere abilitato devo passare attraverso qualcosa di simile:
shell.getDisplay().asyncExec(new Runnable() {
public void run() {
buttonOk.setEnabled(true);
}
});
ho preferiscono mantenere il mio codice sorgente come piatto come mi sarà possibile, ma ho bisogno di un enorme 3 livelli di rientro solo per fare qualcosa di semplice
C'è un modo per avvolgerlo? Vorrei una classe come:
public class UIUpdater {
public static void updateUI(Shell shell, *function_ptr*) {
shell.getDisplay().asyncExec(new Runnable() {
public void run() {
//Execute function_ptr
}
});
}
}
e può essere utilizzato in questo modo:
UIUpdater.updateUI(shell, buttonOk.setEnabled(true));
Qualcosa di simile a questo sarebbe grande per nascondere quella orribile pasticcio SWT sembra pensare è necessario fare nulla.
Come ho capito, Java non può fare i puntatori di funzioni. Ma Java 7 avrà qualcosa chiamato Closures che dovrebbe essere quello che voglio. Ma nel frattempo c'è qualcosa che posso fare per passare un puntatore a funzione o un callback ad un'altra funzione da eseguire?
Per inciso, sto iniziando a pensare che valga la pena di rifare questa applicazione in Swing, e non devo sopportare questa orribile merda e non cross-platformy di SWT.
Spero che tu sappia, che Swing è unico thread troppo. Quindi devi fare lo stesso come in SWT per aggiornare un elemento della GUI da un altro thread. L'unica differenza è che Swing non genera un'eccezione quando chiami i metodi Swting dal thread sbagliato. Ma vedrai probabilmente bug insoddisfatti nella tua app quando commetti un errore. –