Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.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中的应用程序_Java_Restart - Fatal编程技术网

如何取消系统。退出并重新启动Java中的应用程序

如何取消系统。退出并重新启动Java中的应用程序,java,restart,Java,Restart,对于应用程序,我需要重新启动应用程序本身的主类/函数 那么,在特定代码上检测应用程序退出,然后重新启动自己的最佳方法是什么呢?您应该使用该方法 但请注意:因为您是说要在System.exit上重新启动main方法,所以您可能引入了进入无限循环的可能性。您应该使用该方法 但请注意:因为您是说要在System.exit上重新启动main方法,您可能引入了进入无限循环的可能性。最好的方法是在启动器或包装器脚本中实现重新启动逻辑 我非常确定,在应用程序自己的JVM中,用纯Java实现完全JVM重启是不可

对于应用程序,我需要重新启动应用程序本身的主类/函数

那么,在特定代码上检测应用程序退出,然后重新启动自己的最佳方法是什么呢?

您应该使用该方法

但请注意:因为您是说要在System.exit上重新启动main方法,所以您可能引入了进入无限循环的可能性。

您应该使用该方法


但请注意:因为您是说要在System.exit上重新启动main方法,您可能引入了进入无限循环的可能性。

最好的方法是在启动器或包装器脚本中实现重新启动逻辑

我非常确定,在应用程序自己的JVM中,用纯Java实现完全JVM重启是不可能的。除了完全重启JVM之外,执行以下操作不需要任何东西:

  • 更改JVM选项(例如堆大小)
  • 清除泄漏的物体,或
  • 摆脱不响应
    Thread.interrupt()
    的Java线程

    • 最好的方法是在启动器或包装器脚本中实现重启逻辑

      我非常确定,在应用程序自己的JVM中,用纯Java实现完全JVM重启是不可能的。除了完全重启JVM之外,执行以下操作不需要任何东西:

      • 更改JVM选项(例如堆大小)
      • 清除泄漏的物体,或
      • 摆脱不响应
        Thread.interrupt()
        的Java线程

        • 为什么不将所谓的main方法嵌入启动器main方法中


          您的launcher类使用一个SecurityManager来禁止调用System.exit。这样,当初始维护退出时,抛出一个SecurityException(并在启动器中捕获)。然后启动器重新启动初始main。

          为什么不将所谓的main方法嵌入启动器main方法中


          您的launcher类使用一个SecurityManager来禁止调用System.exit。这样,当初始维护退出时,抛出一个SecurityException(并在启动器中捕获)。然后启动器重新启动初始主程序。

          最后
          的作用类似于析构函数,因此我们可以重新启动这样的应用程序。警告:
          finally
          是一个很难完成的替换,而且它不是一个合适的析构函数

          public class RestartDemo
          {
              public void oddeven(int x)
              {
                  if(x % 2 != 0)
                  {
                      try
                      {
                          this.restart();
                      }
                      catch(Exception e)
                      { 
                           //do nothing
                      }
                  }
                  else
                  {
                      System.out.println(x + " is even");
                  }
              }
          
              public void restart()throws Exception
              {
                  try
                  {
                      throw new Exception("Force restart!");
                  }
                  finally
                  {
                      RestartDemo.main(new String[0]);
                  }
              }
          
              public static void main(String args[])
              {
                  RestartDemo r = new RestartDemo();
                  r.oddeven((int)(Math.random() * 100));
              }
          }
          

          最后
          的作用类似于析构函数,因此我们可以像这样重新启动应用程序。警告:
          finally
          是一个很难完成的替换,而且它不是一个合适的析构函数

          public class RestartDemo
          {
              public void oddeven(int x)
              {
                  if(x % 2 != 0)
                  {
                      try
                      {
                          this.restart();
                      }
                      catch(Exception e)
                      { 
                           //do nothing
                      }
                  }
                  else
                  {
                      System.out.println(x + " is even");
                  }
              }
          
              public void restart()throws Exception
              {
                  try
                  {
                      throw new Exception("Force restart!");
                  }
                  finally
                  {
                      RestartDemo.main(new String[0]);
                  }
              }
          
              public static void main(String args[])
              {
                  RestartDemo r = new RestartDemo();
                  r.oddeven((int)(Math.random() * 100));
              }
          }
          

          这就是为什么我需要退出密码。。。我怎么才能得到退出密码?我觉得这不管用。关机挂钩无法阻止JVM关机,或者(本身)导致JVM重新启动。即使它确实停止了,我也不主张使用关机挂钩,因为这不是关机挂钩的目的。他们将在JVM退出之前完成一些清理操作。一开始并不是为了阻止它退出。我尝试了其他一些事情,但没有成功。希望有人能给我一个小例子?这就是为什么我需要退出代码。。。我怎么才能得到退出密码?我觉得这不管用。关机挂钩无法阻止JVM关机,或者(本身)导致JVM重新启动。即使它确实停止了,我也不主张使用关机挂钩,因为这不是关机挂钩的目的。他们将在JVM退出之前完成一些清理操作。一开始并不是为了阻止它退出。我尝试了其他一些事情,但没有成功。希望有人能给我一个小例子?你应该修改你的启动程序来检查JVM进程的退出代码,并在需要时重新启动。我尝试了其他一些方法,但没有成功。希望有人能给我一个小例子?你应该修改你的启动程序来检查JVM进程的退出代码,并在需要时重新启动。我尝试了其他一些方法,但没有成功。希望有人能给我一个小例子?我已经有了一个类似的启动器,我调用了另一个JAR。在这里看到:它是有效的。我现在甚至可以卸载被调用的jar,但不知何故,我无法阻止它关闭VM。如果它抛出一个SecurityException,它就不会在启动器中抛出它,而是在被调用的JAR中抛出它,对吗?编辑:我想当我再次尝试重新启动主功能时,它会以某种方式关闭。有人能给我举个小例子吗?我已经试过一些安全例外的东西了。如果需要,您可以查看源代码:我已经有了一个类似的启动器,并且我调用了另一个JAR。在这里看到:它是有效的。我现在甚至可以卸载被调用的jar,但不知何故,我无法阻止它关闭VM。如果它抛出一个SecurityException,它就不会在启动器中抛出它,而是在被调用的JAR中抛出它,对吗?编辑:我想当我再次尝试重新启动主功能时,它会以某种方式关闭。有人能给我举个小例子吗?我已经试过一些安全例外的东西了。如果需要,您可以查看源代码: