gpt4 book ai didi

java - 如何在 finally block 中调用 System.exit(0) 后运行代码

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:10:52 26 4
gpt4 key购买 nike

我有三个类,比如 alpha、beta、gamma,这三个类中的每一个都有一个 main 方法。

alpha 和 beta 类在它们的 main 方法中都有一个 try...catch...finally block ,如下所示:

public class alpha{

public static void main(String[] args){
try{
Do something;
}catch(Exception ex){
ex.printStackTrace();
}
finally{
System.exit(0);
}
}
}


public class beta{

public static void main(String[] args){
try{
Do something;
}catch(Exception ex){
ex.printStackTrace();
}
finally{
System.exit(0);
}
}
}

现在在 gamma 类中,我调用 alpha 和 beta 类的主要方法连续运行,如下所示

public gamma{

public static void main(String[] args) {
try {
alpha.main(arg);
beta.main(arg1);
} catch (Exception e) {
e.printStackTrace();
}
}

问题是代码 beta.main(arg1) 永远不会到达,因为 System.exit(0) 在 alpha 类的 finally block 。由于 alpha 和 beta 在单独执行时是独立的应用程序,因此它们应该在程序结束时终止服务。所以现在有任何方法可以到达 beta.main(arg1) 行,而无需对 alpha 和 beta 类的实际功能做太多更改。

如果您需要更多详细信息,请告诉我。提前致谢...

最佳答案

在这种情况下,可以使用关闭钩子(Hook):

public class Gamma{

public static void main(String[] args) {
try {
Thread hook = new Thread() { public void run() { Beta.main(args); } };
hook.setDaemon(true);
Runtime.getRuntime().addShutdownHook(hook);
Alpha.main(args);
} catch (Exception e) {
e.printStackTrace();
}
}
}

关于java - 如何在 finally block 中调用 System.exit(0) 后运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8730638/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com