2

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

4

5 回答 5

1

由于您控制代码,因此您希望在 GUI 中有一些允许使用System.exit. 因此,如果您使用的是 Swing,您可以执行以下操作:

JButton b = new JButton("Exit");
b.setActionListener(new ActionListener(){
  public void actionPerformed(ActionEvent e) {
    System.exit(0);
  }
}
于 2009-08-18T15:42:52.283 回答
1

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

addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
});

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

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

setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
于 2009-08-18T15:53:32.417 回答
0

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

于 2009-08-20T17:57:40.740 回答
0

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

您可以在 Apache 的 Commons Daemon 项目中找到一个非常流行的实现:http: //commons.apache.org/daemon/

于 2009-08-18T15:58:01.567 回答
0

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

于 2009-08-18T20:32:25.413 回答