【问题标题】:Running a JAVA program as a scheduled task将 JAVA 程序作为计划任务运行
【发布时间】:2012-08-15 13:51:51
【问题描述】:

我正在尝试在 Windows 7 机器上每天运行一次简单的 JAVA 程序。

我的代码在 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 框闪烁一秒钟。我预计代码需要大约 30 秒才能运行。代码应该将数据持久化到数据库中,并且不会发生更新。

代码也使用java.util.logging,所以我应该看到日志条目,但我没有。

我强烈怀疑我没有正确运行 JAVA 命令,或者它在通过调度程序运行时出现了错误的类路径问题,而从 DOS 提示符运行时不存在。

我们将不胜感激。如果你以前见过这个并且可以对其进行排序,那就太好了。如果您能告诉我如何从 Scheduler 获得有意义的错误跟踪,那也将非常有帮助。

谢谢!

【问题讨论】:

  • 一种调试方法是将完整的 java -jar 命令放入批处理脚本中并执行该命令,将任何输出重定向到文件(请参阅support.microsoft.com/kb/110930
  • 您将斜杠 (/) 与反斜杠 (\) 混合使用。你确定没问题?
  • 您在代码中使用的是System.getProperty("user.dir") 还是System.getProperty("java.class.path")

标签: java windows scheduler


【解决方案1】:

除非您指定以哪个用户身份运行,否则调度程序将在不同的用户下运行。如果它没有以您的用户身份运行,那么它将无法写入您的目录。

【讨论】:

    【解决方案2】:

    我认为您可以创建一个简单的批处理脚本,以这种方式启动您的程序:

    @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 然后调度此脚本而不是直接调度程序。

    【讨论】:

    • 我尝试了很多方法来使其正常工作。我确保它以具有足够权限的用户身份运行。我修复了 / \ 问题。执行上述操作,通过 bat 文件间接运行 java 就是诀窍。谢谢 aleroot
    • 为什么会这样呢?为什么直接执行jar会失败?
    • 我试图安排 .bat 文件 3 天没有成功。这个答案救了我的命谢谢@aleroot
    【解决方案3】:

    在将所有字体的引用更改为“SansSerif”后,我解决了

    我在 Java 中使用 Jasper Reports 创建 PDF 文件。当我在 Windows Server 2003 上双击批处理文件或调度程序时,它工作正常,但不能与 2008 年的调度程序一起工作。

    我尝试了许多不同的方法,但没有任何效果,所以我认为可能是 Windows Server 2008 阻止了访问?。

    现在运行完美。因此,如果您遇到问题,请检查对您正在使用的任何内容的引用。

    【讨论】:

      【解决方案4】:

      原始问题的真正问题是 Microsoft 系统上的 java 安装问题。 Java jre 安装到 Program Files\java。可执行文件 (java.exe) 安装在该 java\bin 目录中。从命令行运行,操作系统会在正确的位置查找 java.exe。从其他 MS 工具(例如 VBA Excel 或本例中的 TaskScheduler)运行,它不会!

      您可以通过查看 TaskScheduler 工具中的任务历史记录来发现 TaskScheduler 正在寻找错误的位置。双击一些历史事件,将列出动作和返回码。该操作将显示 TaskScheduler 正在尝试运行

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

      因此,将 java.exe 从 java\bin 目录复制到调度程序正在查找的位置,现在它可以工作了。

      或者更新您的任务并提供 java.exe 的完整路径。

      您也可以更新环境系统路径以在 java\bin 目录中查找 java,但这必须适用于所有用户,有时这也是错误的。

      【讨论】:

        猜你喜欢
        • 2013-01-11
        • 2013-12-13
        • 2014-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多