如何取消系统。退出并重新启动Java中的应用程序
对于应用程序,我需要重新启动应用程序本身的主类/函数 那么,在特定代码上检测应用程序退出,然后重新启动自己的最佳方法是什么呢?您应该使用该方法 但请注意:因为您是说要在System.exit上重新启动main方法,所以您可能引入了进入无限循环的可能性。您应该使用该方法如何取消系统。退出并重新启动Java中的应用程序,java,restart,Java,Restart,对于应用程序,我需要重新启动应用程序本身的主类/函数 那么,在特定代码上检测应用程序退出,然后重新启动自己的最佳方法是什么呢?您应该使用该方法 但请注意:因为您是说要在System.exit上重新启动main方法,所以您可能引入了进入无限循环的可能性。您应该使用该方法 但请注意:因为您是说要在System.exit上重新启动main方法,您可能引入了进入无限循环的可能性。最好的方法是在启动器或包装器脚本中实现重新启动逻辑 我非常确定,在应用程序自己的JVM中,用纯Java实现完全JVM重启是不可
但请注意:因为您是说要在System.exit上重新启动main方法,您可能引入了进入无限循环的可能性。最好的方法是在启动器或包装器脚本中实现重新启动逻辑 我非常确定,在应用程序自己的JVM中,用纯Java实现完全JVM重启是不可能的。除了完全重启JVM之外,执行以下操作不需要任何东西:
- 更改JVM选项(例如堆大小)
- 清除泄漏的物体,或
- 摆脱不响应
的Java线程Thread.interrupt()
- 更改JVM选项(例如堆大小)
- 清除泄漏的物体,或
- 摆脱不响应
的Java线程Thread.interrupt()
- 最好的方法是在启动器或包装器脚本中实现重启逻辑
我非常确定,在应用程序自己的JVM中,用纯Java实现完全JVM重启是不可能的。除了完全重启JVM之外,执行以下操作不需要任何东西:
- 为什么不将所谓的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中抛出它,对吗?编辑:我想当我再次尝试重新启动主功能时,它会以某种方式关闭。有人能给我举个小例子吗?我已经试过一些安全例外的东西了。如果需要,您可以查看源代码: