10
votes

Exécuter SwingWorker plusieurs fois

Je veux pouvoir utiliser swingworker Sous-classe plusieurs fois. Est-ce possible?

J'ai lu dans le docteur Java:

swingworker est uniquement conçu pour être exécuté une fois. Exécuter un swingworker plus d'une fois n'entraînera pas une fois l'appel de la méthode DOINbackground deux fois.


2 commentaires

Voulez-vous dire que vous souhaitez réutiliser votre classe de mise en œuvre SwingWorker, ou une instance de la classe?


Je ne sais peut-être que j'ai eu quelque chose de mal, mais quand je crée des instances de travailleurs et appelle exécuté () Méthode, rien n'est exécuté. Cependant, lorsque j'ai essayé d'appeler la méthode Doinbackground (), les travailleurs exécutés


4 Réponses :


10
votes

Une instance d'une classe implémentée SwingWorker ne peut en effet pas courir une seule fois. Il n'y a aucune limite d'instanciation autant d'instances que vous avez besoin et de les exécuter.


4 commentaires

Il y a une limitation, le fait que plusieurs objets doivent être des déchets collectés en faisant cela en fait une limitation. Pour les petites applications, cela peut ne pas avoir d'importance, mais pour des applications extrêmement importantes qui sont obligées de minimiser le nombre de choses qui obtiennent des déchets recueillies pour des raisons de performance, c'est une limitation. Dire, tout droit, qu'il n'y a pas de limitations n'est pas correcte ... Juste parce que cela ne s'applique pas à tout le monde ne le fait pas.


Avez-vous lu la limite-tihon de la classe? Cela ne fonctionnera pas si une instance est exécutée plus d'une fois. Il n'y a pas d'alternative. Et si la mémoire est une limitation la plus probablement Java n'est pas la bonne solution. Donc, si Java est utilisé et qu'il y a suffisamment de mémoire, il n'y a pas de limitations. Pour des applications plus grandes qui sont aussi un problème. Ils doivent être conçus pour une collecte partielle des ordures. Les cas extrêmes peuvent avoir besoin de quelque chose comme un perturbateur, mais il n'y a aucun sens à avoir une interface utilisateur intégrée


Umm ... Il y a une alternative. Avoir une seule instance d'un fichier exécutable, et un exécuté . Même dans la documentation swingworker , il est indiqué que c'est une classe de commodité. Il y a facilement d'autres alternatives. swingworker n'est approprié que lorsque vous pouvez renoncer à certaines choses pour les autres.


Si, après avoir mesurer la performance, plusieurs instances de swingworker se trouvent être un goulot d'étranglement, alors, ouais, optimisez-le. Pour un code régulier, il convient de servir de manière standard de diffusion de tâches d'interface utilisateur afin d'autres programmeurs ou même l'auteur elle-même pourrait la comprendre plus tard. À mon avis, d'autres choses vont probablement causer des problèmes avant swingworker .



1
votes

Vous ne pouvez pas instancier autant d'instances dont vous avez besoin et les exécuter. Dans la classe SwingWorker existe javax.swing.swingworker. max_worker_threads = 10. Pour que vous puissiez exécuter un maximum de 10 instances. Une instance est libérée que celle-ci consacre 10 minutes de temps d'inactivité. N'utilisez pas d'instance SwingWorker comme instance de thread; ce n'est pas un fil.


1 commentaires

Avez-vous venu de dire: "NE PAS"?



0
votes

Essayez de faire ceci:

  private void startTask() {// main method that creates the background task or class that implements the SwingWorker

    AppContext  appContext = AppContext.getAppContext();
    if(appContext!=null){
        appContext.remove(SwingWorker.class); 
    } 
    MassiveMigrationTask task = new MassiveMigrationTask();// class that implements the SwingWorker
    task.execute();// this process implicitly adds the SwingWorker.class to the appContext
    }


0 commentaires

0
votes

Vous pouvez simplement appeler à nouveau votre travailleur battant de effectué () méthode (dépend de la manière dont votre code desséché) xxx

considération setData () et getdata ()

C'est simplement simple HASHMAP J'utilise pour transmettre les données d'entrées à mon ouvrier battant, donc pour le revenir, je viens de passer les mêmes intrants à la nouvelle instance de travailleur oscillant


0 commentaires