Java 停止可执行jar文件

Java 停止可执行jar文件,java,executable-jar,Java,Executable Jar,我有一个可执行的jar文件。一旦启动,停止它的唯一方法就是转到任务管理器并结束javaw进程。有没有更干净的方法来阻止它,比如说使用一个新手用户可以使用的UI?由于您控制代码,您希望GUI中有一些东西允许使用系统退出。退出。因此,如果您使用Swing,您可以执行以下操作: JButton b = new JButton("Exit"); b.setActionListener(new ActionListener(){ public void actionPerformed(ActionEv

我有一个可执行的jar文件。一旦启动,停止它的唯一方法就是转到任务管理器并结束javaw进程。有没有更干净的方法来阻止它,比如说使用一个新手用户可以使用的UI?

由于您控制代码,您希望GUI中有一些东西允许使用
系统退出。退出
。因此,如果您使用Swing,您可以执行以下操作:

JButton b = new JButton("Exit");
b.setActionListener(new ActionListener(){
  public void actionPerformed(ActionEvent e) {
    System.exit(0);
  }
}

另一个有用的技巧是监听windowClosing,当用户单击Windows上的X按钮(以及其他系统上的等效按钮)时会发生这种情况:

我通常把它放在扩展应用程序框架的类的构造函数中

如果使用JFrame,还需要添加以下行:

setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);

如果应用程序没有GUI(例如,如果它是服务),则可以使用本地网络访问来模拟操作系统通常用于启动和停止服务的标准IPC(进程间通信)机制


Apache的Commons守护程序项目中有一个非常流行的实现:

当所有非守护程序线程都结束时,应用程序将结束。这样做的一种方法是创建除一个守护进程之外的所有线程,并让最后一个线程成为等待停止信号的线程。

我终于找到了问题的解决方案。因为我没有可以关闭的GUI,也没有控制台。最好的方法是在java.awt包中使用SystemTray API。右键单击图标并退出。

您有权访问代码还是这是第三方应用程序?我制作了整个应用程序,所以我有权访问代码。或者您可以只执行
setDefaultCloseOperation(WindowConstants.exit\u on\u CLOSE)
并避免使用额外的
WindowListener
。问题是没有GUI应用程序可以在其中放置按钮。我可以制作另一个GUI应用程序来停止我的jar,但是这个GUI将在另一个jvm上工作,因此它可能无法与其他应用程序接口。是的,但有时您需要进行一些清理,而您无法控制这种方式。问题是,没有GUI应用程序可以在其中放置按钮。我可以制作另一个GUI应用程序来停止我的jar,但此GUI将在不同的jvm上工作,因此它可能无法与其他应用程序进行接口。我使用launch4J将我的jar包装成exe,但我希望它作为服务工作,我尝试了Java服务包装器,但由于某些原因它对我不起作用。我会调查你的链接。但到目前为止,我的应用程序还不是一项服务。无论它是否是一项服务,如果没有用户界面,那么控制它的最佳方式就是通过本地网络访问。打开一个只接受本地机器连接的侦听套接字,并等待命令到达一个单独的线程。Commons Daemon已经为您实现了这一点-它们为该方法提供了“服务器”和“客户端”。
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);