我想知道Java中的以下内容之间的区别
System.exit(0);
System.exit(-1);
System.exit(1);
Run Code Online (Sandbox Code Playgroud)
我何时必须适当使用上述代码?
我知道涉及在try/catch/finally块中返回的令人头痛的问题 - finally中的返回始终是方法的返回,即使try或catch块中的返回应该是执行的返回.
但是,同样适用于System.exit()?例如,如果我有一个try块:
try {
//Code
System.exit(0)
}
catch (Exception ex) {
//Log the exception
}
finally {
System.exit(1)
}
Run Code Online (Sandbox Code Playgroud)
如果没有异常,将调用哪个System.exit()?如果exit是return语句,则System.exit(1)行将始终(?)被调用.但是,我不确定退出的行为是否与返回不同.
代码处于极端情况下,即使不是不可能,也很难重现,因此我无法编写单元测试.我今天晚些时候会尝试进行一项实验,如果我得到一些免费的分钟,但我很好奇,也许有人知道答案,可以提供它,或者我无法运行实验.
我知道不应该使用system.exit(0).我已经阅读了很多教程,并说明为什么不建议退出应用程序和finish()是一个更好的选择,但在非常罕见的情况下使用这个脏的解决方法比我的主要问题是 它会损害Android设备或任何方面设备如果使用?
如果我杀了一个Android应用程序System.exit(...)
,我传递的状态代码是否重要?我找不到任何关于Android是否会忽略它的文档,或者某些文档是否会导致任何错误消息或具有任何其他含义.
能否之间的任何一个份额,我差System.exit(0)
和System.exit(-1)
它是有益的,如果你用例子来解释.
我正在努力 My application's under maintanace module
try {
if (isUndermaintanace) {
System.exit(1);
} else {
prepareResources();
}
} catch (Exception e) {
printStack(e);
} finally {
cleanResources();
}
Run Code Online (Sandbox Code Playgroud)
当我通过 isundermaintanace
true
最后没有执行.
我错过了什么?还有其他办法吗?
我想在退出应用程序时显示一个简单的toast.问题是,没有显示吐司.我认为这是因为活动完成或因为System.exit(0)
,但我不知道如何解决它.有人有小费吗?谢谢!!
在我的活动中,我有以下代码:
Toast.makeText(this,"Exit application.",Toast.LENGTH_SHORT).show();
exitApp();
public void exitApp (){
App.getInstance().exit();
finish();
}
Run Code Online (Sandbox Code Playgroud)
App中的mehod退出:
public void exit() {
System.exit(0);
}
Run Code Online (Sandbox Code Playgroud) 我有一个Java swing启动程序来启动另一个类(运行它的main方法).每个程序都有取消按钮退出自己.
我System.exit(0);
按下这个取消按钮时使用.
启动程序执行此操作actionPerformed
:
if (source==carMenuItem) {
ta.append("Car launched\n");
TestCar.main(par);
}
if (source==DialogboxMenuItem) {
ta.append("Dialogbox launched\n");
DialogBox.main(par);
}
if (source==LengthConversionMenuItem) {
ta.append("LengthConversion launched\n");
LengthConversion.main(par);
}
Run Code Online (Sandbox Code Playgroud)
当我按下程序的取消按钮时,它也会关闭我的启动程序.我该如何避免这种情况?
我在@Tej Kiran 看到了一个问题,这正是我的问题,但没有回答,最后的评论说:
"你知道你的应用程序中是否注册了任何关闭钩子,或者你使用的任何库是否有一个关闭钩子?关闭钩子是一个线程,如果该线程中有一个死锁导致它永远不会终止,JVM永远不会退出."
我的程序中有一个方法shutdown hook
Runtime.getRuntime().addShutdownHook(new Thread("Shutdown Hook") {
@Override
public void run() {
System.out.println("---------------");
System.out.printf("%d threads running%n", Thread.activeCount());
Map<Thread, StackTraceElement[]> threads = Thread
.getAllStackTraces();
for (Entry<Thread, StackTraceElement[]> e : threads.entrySet()) {
Thread t = e.getKey();
System.out.printf("%s\t%s\t%s%n", t.getName(),
t.isDaemon(), t.isAlive());
StackTraceElement[] elements = e.getValue();
for (StackTraceElement trc : elements) {
System.out.println("\t" + trc);
}
}
System.out.println("---------------");
try {UIUtil.cancelAllTasks();} catch (Throwable e) {e.printStackTrace();};
try {mehad.io.port.ScannerManager.disableAutoHandshake();} catch (Throwable e) {e.printStackTrace();};
try {mehad.io.port.ComPortInterface.getInstance().close();} catch (Throwable e) {e.printStackTrace();};
try {
if …
Run Code Online (Sandbox Code Playgroud) 我正在进入一个需要一些自动审查工具的项目.上周我们System.exit()
在代码中找到了一些关闭应用服务器的内容.
似乎FindBugs没有捕获System.exit()
.还有其他工具可以捕捉System.exit()
到我可以从日食中运行吗?
看来这是return status code
从你的角度来看的一种方式main
.但我想知道这int
是怎么回事?我在eclipse上尝试过,但是我没有在控制台上看到它.我怎么得到的status code
public static void main(String[] args){
int status = 123;
System.exit(status);
}
Run Code Online (Sandbox Code Playgroud)