Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我从eclipse运行Swing JDialog时,它显示良好,但在windows服务(services.msc)中不工作_Java_Eclipse_Swing_Batch File_Windows Services - Fatal编程技术网

Java 当我从eclipse运行Swing JDialog时,它显示良好,但在windows服务(services.msc)中不工作

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

我有一个java应用程序,它在一定的时间间隔内运行,并显示一个弹出窗口(用JavaSwing制作)。当我从eclipse运行应用程序时,它工作正常。在我创建了一个jar并使用java-jar命令运行它之后,它也工作得很好。但是当我从windows服务(services.msc)运行jar文件时,弹出窗口并没有出现,除了弹出窗口外,其他所有窗口都正常工作,例如记录数据获取等。 我没有找到任何解决方案,因为我已经在堆栈溢出中应用了所有解决方案,但问题仍然存在

我已经粘贴了所有的信息

提前谢谢

Java代码(此方法将在时间间隔内调用)

要创建服务的文件夹结构:

在“类”文件夹中,存在java类文件:

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服务运行,然后它可能正在运行,这意味着您无法访问计算机屏幕,因此无法显示对话框窗口。