首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSSM时,.jar服务上不显示GUI

使用NSSM时,.jar服务上不显示GUI
EN

Stack Overflow用户
提问于 2018-08-10 09:42:18
回答 1查看 1.3K关注 0票数 2

用一个简单的程序测试nssm:

代码语言:javascript
复制
import javax.swing.JOptionPane;

// a simple program to test if i can get nssm to work
public class Test {

    public static void main(String[]args) throws InterruptedException {
        while(true) {
            JOptionPane.showMessageDialog(null, "Test");
            Thread.sleep(5000);
        }
    }
}

我在上面的程序中创建了一个jar文件,将nssm添加到PATH中,并使用以下代码创建了一个服务:

代码语言:javascript
复制
C:\Users\ProgrammerSausage>nssm install servicetest "C:\ProgramFiles\Java\jre1.8.0_162\bin\java.exe" "-jar C:\Users\ProgrammerSausage\Documents\serviceTest.jar"

Administrator access is needed to install a service.

我输入了我的密码-它似乎起作用了。检查任务管理器服务,它在那里,但“停止”,我启用查看可能发生的事情,说它正在运行。但是什么都没有。我做错了什么?

编辑:

我已将控制台更改为admin。创建了一个.bat (它自己工作):

代码语言:javascript
复制
@echo off
java -jar C:\Users\ProgrammerSausage\Documents\serviceTest.jar

但是,如果我尝试使用NSSM安装批处理文件,它仍然只会打开一个幻影服务,该服务除了显示它正在运行之外,什么也不做。

代码语言:javascript
复制
C:\Windows\system32>nssm install servicetestfour "C:\Users\ProgrammerSausage\Documents\serviceTest.bat"

Service "servicetestfour" installed successfully!

我发现有趣的是,我可以创建任何目录的幻影服务,例如:

代码语言:javascript
复制
C:\Windows\system32>nssm install servicetestfive "C:\Users\ProgrammerSausage\"

Service "servicetestfive" installed successfully!

呃什么?然而,主要的区别是,从随机目录创建的服务不会启动。这表明它可以运行批处理和jar文件,但我没有看到JOptionPane弹出窗口?

编辑:

好的,我已经更改了程序的代码,因为正如所建议的,它可能不允许gui显示,包括一个简单的io调用:

代码语言:javascript
复制
public static void main(String[]args) throws InterruptedException {
    File f = new File("C:\\Users\\ProgrammerSausage\\Documents\\test");
    while(true) {
        if(!f.exists()) {
            f.mkdir();
        }
        JOptionPane.showMessageDialog(null, "Test");
        Thread.sleep(5000);
    }
}

这非常有趣,因为虽然我已经启用了

代码语言:javascript
复制
'Allow service to interact with desktop'

JOptionPane没有显示,但是mkfile()方法仍然被调用,尽管只调用了一次:这意味着程序正在运行,但是JOptionPane隐藏在后台,抓取模式控制并停止循环,如果gui被移除,那么io就能完美地工作。

EN

回答 1

Stack Overflow用户

发布于 2018-08-10 09:53:18

假设您创建的jar是一个可运行的jar (可以使用java -jar从终端运行)...

我建议创建一个运行jar的脚本...

run_serviceTest.bat:

代码语言:javascript
复制
@echo off
java -jar C:\Users\ProgrammerSausage\Documents\serviceTest.jar

然后,您可以基于该脚本创建nssm服务:

代码语言:javascript
复制
nssm install servicetest run_serviceTest.bat

尝试在具有管理员权限的终端上运行该命令。

Nssm将询问“当前目录”以启动服务。选择包含jar的目录。

我看到您的服务使用JOptionPane,这是一个图形用户界面组件。如果您希望您的服务与桌面交互,则需要在服务管理员中启用它:

您还可以从nssm启用桌面交互:

服务通常不与桌面交互。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51777777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档