java - 从窗口服务运行 jar 应用程序时对 Java 服务包装器的疑问

标签 java

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

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

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.

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

最佳答案

回答您的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 而失败。

关于java - 从窗口服务运行 jar 应用程序时对 Java 服务包装器的疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/536211/

相关文章:

java: 类成员的内存是如何分配的?

Java:如何在空格后将字符串拆分为两个单独的数组?

java - 使用 Javassist 编译 hello world 类时出现问题

java - 为什么 jstack out 说线程状态是 "RUNNABLE"而 socketRead

java - 我可以使用 JSSC 与 USB 设备通信吗

从 LaTeX 源创建 PDF 的 Java 库

java - 如何设计查询以在 Parse (Android) 中显示来自其他用户 I "follwow"的内容?

java jbox2d swing 绘制和移动形状

java - 如何确定哪些矩形与给定矩形具有最大重叠?

java - 颜色减法 RBG 或 CIElab