web-dev-qa-db-ja.com

Javaプログラムをスケジュールされたタスクとして実行する

簡単なJavaプログラムをWindows 7マシンで1日に1回実行しようとしています。

私のコードはNetBeans内で正常に動作します。私がクリーンでビルドすると、これが示唆されます:

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

もちろん、これはDOSプロンプトでは機能しません。プログラムとファイルの間にスペースがあるためです。

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"

これはDOSプロンプトで機能します。

Windowsスケジューラで実行するタスクを作成します。

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

引数付き:

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

次にそれを実行すると、DOSボックスが1秒間点滅するだけです。コードの実行には約30秒かかると思います。コードはデータをデータベースに永続化し、更新は行われません。

このコードではJava.util.loggingも使用しているため、ログエントリが表示されるはずですが、表示されません。

Javaコマンドを適切に実行していないか、またはDOSプロンプトから実行しているときにスケジューラーを介して実行しているときに存在しない、クラスパスの問題が存在することを強く疑っています。

助けていただければ幸いです。これを以前に見たことがあり、それを並べ替えることができれば、それは素晴らしいことです。スケジューラから意味のあるエラートレースを取得する方法を教えていただければ、それも非常に役立ちます。

ありがとう!

14
Kevan

このようにプログラムを起動する単純なバッチスクリプトを作成できると思います。

@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"

それをメモ帳にコピーしてJava_script.cmdとして保存し、プログラムではなくこのスクリプトを直接スケジュールします。

16
aleroot

I 解決済みすべてを変更した後フォントの参照を「SansSerif」に変更

Java内でJasperレポートを使用してPDFファイルを作成しました。WindowsServer 2003でバッチファイルまたはスケジューラをダブルクリックすると正常に動作しましたが、 2008年のスケジューラでの作業。

私は何もうまくいかなかったので、さまざまなことを試しましたが、Windows Server 2008がアクセスをブロックしている可能性はありますか?.

今は完璧に働いています。したがって、問題がある場合は、使用しているものへの参照を確認してください。

1
Luix

元の質問の本当の問題は、Javaインストールの問題です。Java jreはProgram Files\Javaにインストールされます。実行可能ファイル(Java.exe) is onlyはそのJava\binディレクトリにインストールされています。コマンドラインから実行すると、osはJava.exeの適切な場所を検索します。他のMSツール(VBA Excelなど、またはこの場合)から実行TaskScheduler)、それはしません!

TaskSchedulerツールでタスクの履歴を表示すると、TaskSchedulerが間違った場所を探していることがわかります。一部の履歴イベントをダブルクリックすると、アクションと戻りコードがリストされます。アクションは、TaskSchedulerが実行を試みていることを示します

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

TaskScheduler History Details

したがって、Java.exeをJava\binディレクトリからスケジューラーが探している場所にコピーすると、動作します。

または、タスクを更新して、Java.exeへの完全パスを指定します。

環境システムパスを更新して、Java\binディレクトリでJavaを探すこともできますが、これはすべてのユーザーに適用する必要があり、場合によってはこれもエラーになります。

0

実行するユーザーを指定しない限り、スケジューラーは別のユーザーで実行されます。ユーザーとして実行されていない場合は、ディレクトリに書き込むことができません。

0
Dan