web-dev-qa-db-fra.com

Exécution d'un programme Java en tant que tâche planifiée

J'essaie d'exécuter un programme Java simple une fois par jour sur un ordinateur Windows 7.

Mon code fonctionne bien dans NetBeans. Si je fais un nettoyage et une construction, cela suggère ceci:

C:\Program Files\Java\jdk1.7.0/bin/Java -jar "C:\Users\User1\Documents\NetBeansProjects\Facebook\dist\Facebook.jar"

Cela ne fonctionne évidemment pas à partir de l'invite du DOS à cause de l'espace entre le programme et les fichiers, donc je le fais:

C:\Program Files\Java\jdk1.7.0/bin/Java -jar "C:\Users\User1\Documents\NetBeansProjects\Facebook\dist\Facebook.jar" -jar "C:\Users\User1\Documents\NetBeansProjects\Facebook\dist\Facebook.jar"

Cela fonctionne à partir de l'invite du DOS.

Je crée maintenant une tâche dans Windows Scheduler pour exécuter:

C:\Program Files\Java\jdk1.7.0/bin/Java

avec des arguments:

-jar "C:\Users\User1\Documents\NetBeansProjects\Facebook\dist\Facebook.jar"

Lorsque je l'exécute ensuite, tout ce que je vois est une boîte de dialogue DOS clignotant pendant une seconde. Je m'attends à ce que le code prenne environ 30 secondes pour s'exécuter. Le code doit conserver les données dans une base de données et aucune mise à jour n'a lieu.

Le code utilise également Java.util.logging, donc je devrais voir les entrées du journal, mais pas moi.

Je soupçonne fortement que je n'exécute pas la commande Java correctement ou qu'il existe un problème de chemin de classe qu'il présente lors de l'exécution via le planificateur et qui n'existe pas lors de l'exécution à partir de l'invite du DOS.

L'aide serait appréciée. Si vous avez déjà vu cela et que vous pouvez le trier, ce serait génial. Si vous pouvez me dire comment obtenir une trace d'erreur significative de Scheduler, cela serait également très utile.

Merci!

14
Kevan

Je pense que vous pourriez créer un script batch simple qui lancera votre programme de la manière suivante: 

@echo off
REM Eventually change directory to the program directory 
cd C:\Users\User1\Documents\NetBeansProjects\Facebook\dist\
REM run the program
"C:\Program Files\Java\jdk1.7.0\bin\Java.exe" -jar "C:\Users\User1\Documents\NetBeansProjects\Facebook\dist\Facebook.jar"

Copiez-le dans le bloc-notes et enregistrez-le sous le nom Java_script.cmd, puis planifiez ce script au lieu du programme directement.

16
aleroot

Je résolu il après avoir changé toutes les références des polices en "SansSerif"

J'utilisais Jasper Reports dans Java pour créer un fichier PDF. Cela fonctionnait bien lorsque je double-cliquais le fichier de commandes ou le planificateur avec Windows Server 2003 mais ne fonctionnais pas avec le planificateur de 2008. 

J'ai essayé beaucoup de choses différentes, mais rien ne fonctionnait alors j'ai pensé qu'il était possible que Windows Server 2008 bloque l'accès ?.

Maintenant fonctionne parfaitement. Donc, si vous rencontrez des problèmes, vérifiez les références à tout ce que vous utilisez.

1
Luix

Le véritable problème de la question initiale est un problème d'installation de Java sur les systèmes Microsoft. Java jre s’installe dans Program Files\Java. L'exécutable (Java.exe) est only installé dans ce répertoire Java\bin. En cours d'exécution à partir de la ligne de commande, le système d'exploitation recherche l'emplacement approprié pour Java.exe. Exécutant à partir d'autres outils MS (tels que VBA Excel ou dans ce cas TaskScheduler), ce n'est pas le cas! 

Vous pouvez constater que TaskScheduler cherche au mauvais endroit en affichant l'historique des tâches dans l'outil TaskScheduler. Double-cliquez sur certains événements de l’historique. L’une des actions et le code de retour seront répertoriés. L'action montrera que TaskScheduler tente de s'exécuter 

"C:\Windows\system32\Java.EXE"

TaskScheduler History Details

Donc, copiez Java.exe du répertoire Java\bin à l’endroit où le planificateur est à la recherche, et maintenant cela fonctionnera. 

Ou mettez à jour votre tâche et indiquez le chemin d'accès complet à Java.exe. 

Vous pouvez également mettre à jour le chemin système de l'environnement pour rechercher Java dans le répertoire Java\bin, mais cela doit s'appliquer à tous les utilisateurs et est parfois aussi défectueux. 

0

Le planificateur s'exécutera sous un autre utilisateur, à moins que vous ne spécifiiez quel utilisateur exécuter. S'il ne fonctionne pas en tant qu'utilisateur, il ne pourra pas écrire dans vos répertoires.

0
Dan