Qu’est-ce qui pourrait empêcher Java ScheduleService de s’exécuter?

Dans mon application Java, je définis un ScheduleService comme ceci:

ScheduledService scheduledService = new ScheduledService() { @Override protected Task createTask() { return new Task() { @Override protected Void call() { tick(); return null; } }; } }; scheduledService.setPeriod(new javafx.util.Duration(TICK_PERIOD.toMillis())); scheduledService.start(); 

Lorsque je déclenche l’application à partir d’IntelliJ, cela fonctionne bien et tick () s’exécute toutes les secondes. Lorsque l’application est packagée au .exe à l’aide de JavaFX Packager, le service n’est jamais démarré.

L’état du serveur après l’exécution de .start() dans tous les cas est SCHEDULED . Des idées quoi d’autre pourrait se passer? Quelque chose pourrait empêcher la création de threads? Ou peut-être que ce n’est pas basculer entre différents fils?

La documentation de ScheduledService dit (mon accentuation):

Le timing pour cette classe n’est pas absolument fiable. Un thread d’événement très occupé peut introduire un certain décalage dans le début de l’exécution de la tâche en arrière-plan, de sorte que de très petites valeurs pour la période ou le délai risquent d’être inexactes. Un délai ou une période dans les centaines de millisecondes ou plus devrait être assez fiable.

Est-il possible qu’il y ait un problème avec le fil d’événement? Y a-t-il un moyen de l’inspecter?

Après avoir appelé start() , scheduleService.getExecutor() renvoie la valeur null . Est-ce prévu?

J’ai essayé de définir mon propre exécuteur défini de cette façon:

 BlockingQueue blockingQueue = new LinkedBlockingQueue(); ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(32, Integer.MAX_VALUE, 1000, TimeUnit.MILLISECONDS, blockingQueue); scheduledService.setExecutor(threadPoolExecutor); 

puis je l’imprime avant et après le début de l’appel. Avant que cela ressemble à ceci:

 java.util.concurrent.ThreadPoolExecutor@4d97d155[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0] 

et après:

 java.util.concurrent.ThreadPoolExecutor@4d97d155[Running, pool size = 1, active threads = 1, queued tasks = 0, completed tasks = 0] 

Donc, il prétend qu’il existe un fil actif, même s’il ne semble pas du tout être actif.

Mise à jour : j’ai supprimé la mention d’un économiseur d’écran car je parviens à reproduire le problème sous la forme d’un .exe simple, mais le problème persiste: le problème ne se produit pas lorsque vous l’exécutez à partir d’IntelliJ.

J’ai trouvé la solution et cela n’avait rien à voir avec ScheduleService . Il y avait littéralement trois autres bugs dans mon application qui se combinaient pour produire le comportement inattendu et masquer mes tentatives d’explorer le problème.