Я превратил приложение Java в службу Windows, используя прокрутку. Когда я останавливаю службу с помощью программы Windows Services, она зависает и не отвечает. Когда вы запускаете его, используя режим отладки, а затем, когда я завершаю его с помощью ctrl + c, я не вижу, как вызывается метод остановки. Я дал заявление печати, которое не печатается. Ниже мой код. Пожалуйста посоветуй. В журналах Windows Even в этой службе нет ничего.Стоп-метод не вызывается при завершении службы Windows
public static void main(String[] args) {
if ("start".equals(args[0])) {
start(args);
} else if ("stop".equals(args[0])) {
stop(args);
}
}
public static void start(String[] args) {
KubeSdkMain sdkMain = new KubeSdkMain();
sdkMain.startSDK();
}
public static void stop(String[] args) {
System.out.println("stop");
stop = true;
}
Ниже приведено содержимое файла bat, который я запускаю для установки службы.
cd "G:\Projects"
set PR_PATH="G:\Projects"
SET PR_SERVICE_NAME=TestService
SET PR_JAR=KKSDK.jar
SET START_CLASS=com.example.test
SET START_METHOD=start
SET STOP_CLASS=com.example.test
SET STOP_METHOD=stop
rem ; separated values
SET STOP_PARAMS=0
rem ; separated values
SET JVM_OPTIONS=-Dapp.home=%PR_PATH%
prunsrv.exe //IS//%PR_SERVICE_NAME% --Install="%PR_PATH%\prunsrv.exe" --Jvm=auto --Startup=auto --StartMode=jvm --StartClass=%START_CLASS% --StartMethod=%START_METHOD% --StopMode=jvm --StopClass=%STOP_CLASS% --StopMethod=%STOP_METHOD% ++StopParams=%STOP_PARAMS% --Classpath="%PR_PATH%\%PR_JAR%" --DisplayName="%PR_SERVICE_NAME%" ++JvmOptions=%JVM_OPTIONS%
пауза
Как вы инициировать остановку –
инициировать в смысле? – mayooran
У вас есть набор потоков с 'Runtime.addShutdownHook()' для вызова stop во время отладки? Стоп явно установлен для вызова в вашем вызове prunsrv, поэтому вам нужно явно называть его во время отладки. –