从窗口服务运行jar应用程序时,在Java Service包装器中存在疑问

时间:2009-02-11 10:14:59

标签: java

我有一个jar应用程序,它处理并将文件转换为csv文件。我已经使用Java Service Wrapper在Windows服务中运行它。当我运行“InstallApp-NT.Bat”文件并在运行“app”命令时开始运行我的应用程序时,它成功安装了我的jar应用程序。

但是当我尝试在服务中启动服务时,它没有启动并在对话框中显示以下消息<

Windows could not start the generic Preprocessor application on Local Computer. For more information, review the System Event Log. If this is a non-microsoft service, contact the service vendor, and refer to service-specific error code1
I have the system log file and it showing the below error message
System Event log: 
--> Wrapper Started as Service
Java Service Wrapper Community Edition 3.3.2
Copyright (C) 1999-2009 Tanuki Software, Ltd. All Rights Reserved. 
http://wrapper.tanukisoftware.org
Launching a JVM... 
WrapperManager: Initializing... 
WrapperSimpleApp: 
WrapperSimpleApp: Encountered an error running main: 
WrapperSimpleApp: java. Lang. NullPointerException
WrapperSimpleApp: at java. Util. Hashtable. Put(Hashtable. Java: 396)
WrapperSimpleApp: at java. Util. Properties. SetProperty(Properties. Java: 128)
WrapperSimpleApp: at java. Lang. System. SetProperty(System. Java: 701)
WrapperSimpleApp: at com. Dnb. Genericpreprocessor. Process. ProcessRunner. Main(Unknown Source)
WrapperSimpleApp: at sun. Reflect. NativeMethodAccessorImpl. Invoke0(Native Method)
WrapperSimpleApp: at sun. Reflect. NativeMethodAccessorImpl. Invoke(NativeMethodAccessorImpl. Java: 39)
WrapperSimpleApp: at sun. Reflect. DelegatingMethodAccessorImpl. Invoke(DelegatingMethodAccessorImpl. Java: 25)          
WrapperSimpleApp: at java. Lang. Reflect. Method. Invoke(Method. Java: 585)
WrapperSimpleApp: at org. Tanukisoftware. Wrapper. WrapperSimpleApp. Run(WrapperSimpleApp. Java: 238)
WrapperSimpleApp: at java. Lang. Thread. Run(Thread. Java: 595)
<-- Wrapper Stopped

我认为应用程序代码中没有任何错误,因为它在运行“app”命令时运行正常。请帮助我现在应该做的。提前谢谢。


我在com.dnb.genericpreprocessor.process.ProcessRunner课程中使用以下代码。

String projectHome = "D:\BL";
System.setProperty("project.home", projectHome);
System.setProperty("log.home",System.getenv("DBE")); ---> DBE is the envirinment variable I created in user variables.

当我通过提供app命令运行应用程序时...它通过打印环境值来运行应用程序,但是当我在服务中启动时显示相同的错误。

5 个答案:

答案 0 :(得分:1)

回答你所说的question update作为答案,你需要确保变量实际上是在你运行应用程序的特定环境中设置的。它似乎不是。实际上,为了避免使用NullPointerException,我会将您的代码修改为:

String loghome = System.getenv("DBE");
if (loghome == null) {
  // LOG A COMPLAINT that the environment variable is not set
  loghome = "some reasonable default value";
}
System.setProperty("log.home", loghome);

所以,如果在错误的环境中执行,至少你的应用程序不会因为钝的NPE而失败。

答案 1 :(得分:0)

检查com.dnb.genericpreprocessor.process.ProcessRunner,如果这是您的代码,并查看您在System属性中设置的数据。 NullPointer告诉你传递的密钥或值是Null。

答案 2 :(得分:0)

检查你的wrapper.config;你需要按顺序拥有所有必需的罐子,每个罐子都带有自己的索引号(由于某种原因):

wrapper.java.classpath。 1 = .. / LIB / wrapper.jar

wrapper.java.classpath。 2 =%JAVA_HOME%/ LIB / tools.jar中

...

只是第一个想法。

答案 3 :(得分:0)

我不熟悉您正在使用的专有解决方案,但似乎您以某种方式将其配置错误。

看起来包装器应该具有的某个参数为null并且一直向上传播,直到系统尝试将其设置为属性。

答案 4 :(得分:0)

也许您应该将'DBE'环境放在系统变量而不是用户变量中。 Windows服务从系统帐户开始。