我一直在尝试从我的 JAR 文件中运行 Windows 服务。WinRun4j 似乎能够完成这项工作,但我无法让它工作。我特别发现调试起来非常困难。我尝试了几种记录方法(写入 .txt 文件,WinRun4j 的 EventLog 类),但我似乎无法生成任何输出。
该服务安装良好(最终..),我可以启动它。它应该启动一个 Jetty 服务器,该服务器生成一个可以通过 HTTP 访问的 XML 文件。该应用程序适用于独立版本,但不适用于服务。该服务已启动,但只要我调用 URL,它就会停止而不会产生错误。
这是我的服务类:
package com.some.package;
import org.boris.winrun4j.AbstractService;
import org.boris.winrun4j.ServiceException;
/**
* A basic service.
*/
public class StockService extends AbstractService {
private StockServer srv;
public int serviceMain(String[] args) throws ServiceException {
while (!shutdown) {
try {
Thread.sleep(5000);
} catch(InterruptedException e) {
}
if(srv == null) {
try {
srv = new StockServer();
srv.start();
} catch (Exception e) {
}
}
}
return 0;
}
}
我发现如果我从 serviceMain 类启动 Jetty 服务器,该服务就不想启动。我不得不开始一个新线程。所以 StockServer 扩展了 Thread:
public class StockServer extends Thread {
private Server server;
public void run() {
if (server == null) {
try {
server = new Server(8080);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/example");
StockServlet stockServlet = new StockServlet();
context.addServlet(new ServletHolder(stockServlet), "/stock/*");
server.setHandler(context);
server.setStopAtShutdown(true);
server.start();
server.join();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
}
由于它作为 Java 应用程序运行得非常好,我只是不知道如何调试这个东西。我希望你们中的一个人能指出我正确的方向:)。