Si j'ai une méthode qui doit retourner quelque chose, et qu'elle doit afficher quelque chose sur l'interface utilisateur pour le faire (par exemple pour poser une question à l'utilisateur), j'utilise java.awt.EventQueue.invokeLater(new Runnable() {...});
pour l'exécuter sur le thread UI (Android fait quelque chose similaire en utilisant runOnUiThread()
). Comment puis-je retourner quelque chose de ce Runnable
? Par exemple:Comment puis-je retourner au mieux une valeur d'une classe anonyme dans une méthode?
public String askQuestion()
{
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
String response = JOptionPane.showInputDialog(null, "What is 2+2?");
//how do I return this response object to the method?
}
});
}
Je ne peux pas utiliser une variable locale finale car la compilation ne me permettra pas de l'affecter. Je peux utiliser une variable de classe et y accéder en utilisant Class.this.<variable>
mais est-ce le meilleur/seul moyen d'accomplir cela? Editer: J'ai besoin de renvoyer des choses autres que String
aussi, c'était juste un exemple.
Pouvez-vous utiliser 'java.util.concurrent.Future'? Ceux-ci sont généralement utilisés pour renvoyer quelque chose au thread principal. –
Vous voulez dire 'FutureTask'? Je n'en ai jamais utilisé un auparavant, en lisant maintenant. – Logan
@Heuster En fait, cela semble très utile en effet. J'espère que cela fonctionne aussi sur Android. – Logan