Quelle est la bonne façon d'effectuer une opération de longue durée en dehors du EDT?

voix
3

Dans une application de bureau Java 1.5 (il doit fonctionner sur un grand nombre de machines MacOS X qui nerver voir un 1.6 VM en raison de la politique d'Apple) ce qui est une bonne façon d'effectuer un calcul long en dehors du EDT?

Disons, par exemple, lorsque l'utilisateur clique sur un bouton qui lance une opération: je reçois la notification à l'EDT et je veux exécuter une méthode ( par exemple crunchData()).

Voici une façon de le faire:

        final Thread t = new Thread( new Runnable() {
            public void run() {
                crunchData();
            }
        } );
        t.start;

Je veux dire: ce fait ce que je veux, mais chaque fois que l'utilisateur lance une tâche en cours d'exécution peut être longue, j'utilise l'idiome ci-dessus. Et je sens que je suis toujours sans nécessité beaucoup de tâches créais (d'ailleurs, bien que parfois l'opération peut être longue, parfois, il ne sera pas et dans ce cas, j'aimerais l'application aussi responsable que possible).

Une autre façon de le faire serait d'avoir une autre (non-HAE) fil (ou un pool de threads), toujours en cours d' exécution, par exemple en attente sur une file d' attente de blocage et d' exécution, par exemple, Runnable que j'enqueue partout où je dois effectuer un long opération.

Quelle est la bonne façon de régler ce problème?

EDIT: Est -ce la bonne façon de traiter avec quelque chose aussi simple que cela à installer SwingWorker? Comment les gens face à cette ( ce qui semble assez basique) avant est SwingWorkervenu?

Créé 17/08/2010 à 16:42
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
3

La méthode recommandée est d'avoir votre code EDT démarrer une SwingWorker , qui fera le travail à l' extérieur et retourner le résultat à vous.

Créé 17/08/2010 à 16:48
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more