10
votes

JavaFX: Utilisez un fil plus d'une fois

Je suis nouveau avec Javafx et j'ai un petit problème avec un fil: je peux l'exécuter deux fois et je ne trouve pas pourquoi.

Voici une somme de mon code: P>

Task<Void> task = new Task<Void>() {
    @Override public Void call() throws ImageLoadedException, HomographyException, IOException {
        try{
            System.out.println("GO !");
            return null;
        }
        catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
    @Override
    protected void succeeded() {
        super.succeeded();
        System.out.println("SUCCEEDED");
     }
};

@FXML protected void launch(ActionEvent event){
    new Thread(task).start();
}


1 commentaires

Non, vous ne pouvez pas utiliser de fil plus d'une fois.


3 Réponses :


11
votes

du .start () Documentation: Non

Il n'est jamais légal de commencer un fil plus d'une fois. En particulier, un Le fil peut ne pas être redémarré une fois qu'il a terminé l'exécution.

du Concurrence à JavaFX Tutoriel:

La classe de tâches définit un objet ponctuel qui ne peut pas être réutilisé. Si tu Besoin d'un objet de travailleur réutilisable, utilisez la classe de service.

Donc, vous devez envisager le Service classe plutôt que Tâche .


EDIT : Cela devrait fonctionner pour vous:

Service de service = nouveau service <> (tâche> xxx


4 commentaires

Merci beaucoup pour votre aide. Je vais chercher ça maintenant :)


N'oubliez pas de définir l'exécuteur vous-même et de réutiliser cela ou vous créez toujours de nouveaux threads partout.


@AndyTILL Pouvez-vous suggérer une meilleure approche?


Normalement, il y aurait beaucoup de cours de service et les réinitialiserait toujours à laisser un thread (exécuteur) par service. Réutiliser l'objet exécuteur en appelant le service SetExecutor et la création d'une nouvelle instance du service vous permettra de réutiliser les threads créés par cet exécuteur, s'il est configuré.



0
votes

le faire avec une classe wrapper xxx


0 commentaires

1
votes

avec un bouton peut déclencher de nouvelles tâches xxx


0 commentaires