Java 当我从eclipse运行Swing JDialog时,它显示良好,但在windows服务(services.msc)中不工作
我有一个java应用程序,它在一定的时间间隔内运行,并显示一个弹出窗口(用JavaSwing制作)。当我从eclipse运行应用程序时,它工作正常。在我创建了一个jar并使用java-jar命令运行它之后,它也工作得很好。但是当我从windows服务(services.msc)运行jar文件时,弹出窗口并没有出现,除了弹出窗口外,其他所有窗口都正常工作,例如记录数据获取等。 我没有找到任何解决方案,因为我已经在堆栈溢出中应用了所有解决方案,但问题仍然存在 我已经粘贴了所有的信息 提前谢谢 Java代码(此方法将在时间间隔内调用) 要创建服务的文件夹结构: 在“类”文件夹中,存在java类文件:Java 当我从eclipse运行Swing JDialog时,它显示良好,但在windows服务(services.msc)中不工作,java,eclipse,swing,batch-file,windows-services,Java,Eclipse,Swing,Batch File,Windows Services,我有一个java应用程序,它在一定的时间间隔内运行,并显示一个弹出窗口(用JavaSwing制作)。当我从eclipse运行应用程序时,它工作正常。在我创建了一个jar并使用java-jar命令运行它之后,它也工作得很好。但是当我从windows服务(services.msc)运行jar文件时,弹出窗口并没有出现,除了弹出窗口外,其他所有窗口都正常工作,例如记录数据获取等。 我没有找到任何解决方案,因为我已经在堆栈溢出中应用了所有解决方案,但问题仍然存在 我已经粘贴了所有的信息 提前谢谢 Jav
public class EcsClientService
{
Process proc;
private static EcsClientService serviceInstance;
private boolean stopped;
public EcsClientService() {
this.stopped = false;
}
public static void windowsService(final String[] array) {
String anObject = "start";
if (array.length > 0) {
anObject = array[0];
}
if ("start".equals(anObject)) {
EcsClientService.serviceInstance.start();
}
else {
EcsClientService.serviceInstance.stop();
}
}
public void start() {
this.stopped = false;
try {
System.out.println("currentDirectory>>> " + new File(EcsClientService.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getParentFile().getAbsolutePath().replace("%20", " "));
this.proc = Runtime.getRuntime().exec("cmd.exe /c start ECSClientService.bat");
}
catch (Exception ex) {
ex.printStackTrace();
}
while (!this.stopped) {
synchronized (this) {
try {
this.wait(60000L);
}
catch (InterruptedException ex2) {}
}
}
}
public void stop() {
this.stopped = true;
synchronized (this) {
this.notify();
}
try {
Runtime.getRuntime().exec("wmic Path win32_process Where \"CommandLine Like '%ECSClientService.bat%' OR CommandLine Like '%-jar ECSClientService.jar%'\" Call Terminate");
}
catch (Exception ex) {}
}
static {
EcsClientService.serviceInstance = new EcsClientService();
}
}
InstallService.bat
for /f %%i in ("%20") do set curpath=%%~dpi
common\ecsClient.exe //DS//ECSClientService
common\ecsClient.exe //IS//ECSClientService --Install=%curpath%\common\ecsClient.exe --Description="Employee Communication Service" --Jvm=auto --Classpath=%curpath%\common\classes --StartMode=jvm --StartClass=EcsClientService --StartMethod=windowsService --StartParams=start --StopMode=jvm --StopClass=EcsClientService --StopMethod=windowsService --StopParams=stop --StopMode=jvm --Startup=auto --LogPath=common\logs --StdOutput=auto --StdError=auto
pause
common\ecsClient.exe //ES//ECSClientService
common\ecsClient.exe //SS//ECSClientService
common\ecsClient.exe //DS//ECSClientService
@ECHO OFF
SET CampaignArg=%1
for /f %%i in ("%0") do set curpath=%%~dpi
cd /d %curpath%
java -jar ECSClientService.jar %CampaignArg%
pause
StartService.bat
for /f %%i in ("%20") do set curpath=%%~dpi
common\ecsClient.exe //DS//ECSClientService
common\ecsClient.exe //IS//ECSClientService --Install=%curpath%\common\ecsClient.exe --Description="Employee Communication Service" --Jvm=auto --Classpath=%curpath%\common\classes --StartMode=jvm --StartClass=EcsClientService --StartMethod=windowsService --StartParams=start --StopMode=jvm --StopClass=EcsClientService --StopMethod=windowsService --StopParams=stop --StopMode=jvm --Startup=auto --LogPath=common\logs --StdOutput=auto --StdError=auto
pause
common\ecsClient.exe //ES//ECSClientService
common\ecsClient.exe //SS//ECSClientService
common\ecsClient.exe //DS//ECSClientService
@ECHO OFF
SET CampaignArg=%1
for /f %%i in ("%0") do set curpath=%%~dpi
cd /d %curpath%
java -jar ECSClientService.jar %CampaignArg%
pause
StopService.bat
for /f %%i in ("%20") do set curpath=%%~dpi
common\ecsClient.exe //DS//ECSClientService
common\ecsClient.exe //IS//ECSClientService --Install=%curpath%\common\ecsClient.exe --Description="Employee Communication Service" --Jvm=auto --Classpath=%curpath%\common\classes --StartMode=jvm --StartClass=EcsClientService --StartMethod=windowsService --StartParams=start --StopMode=jvm --StopClass=EcsClientService --StopMethod=windowsService --StopParams=stop --StopMode=jvm --Startup=auto --LogPath=common\logs --StdOutput=auto --StdError=auto
pause
common\ecsClient.exe //ES//ECSClientService
common\ecsClient.exe //SS//ECSClientService
common\ecsClient.exe //DS//ECSClientService
@ECHO OFF
SET CampaignArg=%1
for /f %%i in ("%0") do set curpath=%%~dpi
cd /d %curpath%
java -jar ECSClientService.jar %CampaignArg%
pause
卸载服务.bat
for /f %%i in ("%20") do set curpath=%%~dpi
common\ecsClient.exe //DS//ECSClientService
common\ecsClient.exe //IS//ECSClientService --Install=%curpath%\common\ecsClient.exe --Description="Employee Communication Service" --Jvm=auto --Classpath=%curpath%\common\classes --StartMode=jvm --StartClass=EcsClientService --StartMethod=windowsService --StartParams=start --StopMode=jvm --StopClass=EcsClientService --StopMethod=windowsService --StopParams=stop --StopMode=jvm --Startup=auto --LogPath=common\logs --StdOutput=auto --StdError=auto
pause
common\ecsClient.exe //ES//ECSClientService
common\ecsClient.exe //SS//ECSClientService
common\ecsClient.exe //DS//ECSClientService
@ECHO OFF
SET CampaignArg=%1
for /f %%i in ("%0") do set curpath=%%~dpi
cd /d %curpath%
java -jar ECSClientService.jar %CampaignArg%
pause
ECSClientService.bat
for /f %%i in ("%20") do set curpath=%%~dpi
common\ecsClient.exe //DS//ECSClientService
common\ecsClient.exe //IS//ECSClientService --Install=%curpath%\common\ecsClient.exe --Description="Employee Communication Service" --Jvm=auto --Classpath=%curpath%\common\classes --StartMode=jvm --StartClass=EcsClientService --StartMethod=windowsService --StartParams=start --StopMode=jvm --StopClass=EcsClientService --StopMethod=windowsService --StopParams=stop --StopMode=jvm --Startup=auto --LogPath=common\logs --StdOutput=auto --StdError=auto
pause
common\ecsClient.exe //ES//ECSClientService
common\ecsClient.exe //SS//ECSClientService
common\ecsClient.exe //DS//ECSClientService
@ECHO OFF
SET CampaignArg=%1
for /f %%i in ("%0") do set curpath=%%~dpi
cd /d %curpath%
java -jar ECSClientService.jar %CampaignArg%
pause
我相信你的问题不在Java。AFAIK服务在后台运行-无论用户是否登录。因此,他们通常无法访问GUI
如果应用程序应在后台但在用户上下文中运行,则可能需要将应用程序移动到autostart程序文件夹,以便用户登录时Windows将启动它。如果您将其作为Windows服务运行,然后它可能正在运行,这意味着您无法访问计算机屏幕,因此无法显示对话框窗口。