0

显示错误消息后如何退出简单Java程序的控制台?

目前我的代码有:

...
...
if (some condition){
//print error
System.exit();
...
...

但这System.exit();会使控制台保持打开状态。我也试过exit(0);System.exit(0);

4

7 回答 7

2

System.exit(1);

应该可以正常工作。请注意,如果您因错误退出,通常会设置一个非零退出代码。从文档

该参数用作状态码;按照惯例,非零状态码表示异常终止。

这意味着您可以使用通用约定编写脚本,生成您的程序的任何进程都可以做出相应的反应等。

于 2012-08-24T14:23:42.280 回答
2

如果您想关闭正在运行您的应用程序的命令提示符窗口,那么我不相信有办法做到这一点(至少不是很好)。

为什么要从命令提示符启动应用程序,然后关闭预先存在的命令提示符窗口?这肯定会消除您正在输出的错误消息(除非它也被记录 - 在这种情况下,为什么要将它打印到您要关闭的窗口?)。

这是特定于 Windows 的,但是会在 Windows 资源管理器中创建一个快捷方式来java -jar MyJarFile.jar执行java MyCompiledClass您想要的操作吗?可以在此处找到有关这种方法的说明。

于 2012-08-24T14:49:02.767 回答
1

如果我理解正确,您想在命令提示符下运行程序,如果程序失败,您希望它显示错误消息,关闭程序和逗号提示窗口?

如果是这种情况,那么我唯一能想到的就是在检查程序退出状态的批处理文件中运行程序。所以在你的代码中写下你的错误信息,然后我建议睡眠几秒钟,这样用户就可以真正看到它,然后退出状态码 1.eg

if(SomeCondition){
  System.err.println("ERROR MESSAGE...");
  Thread.sleep(3000);//Sleep for 3 seconds... 
  System.exit(1);
}

然后从检查“ERRORLEVEL”环境变量的批处理文件运行您的程序,例如

java <INSERT_PROGRAM_NAME>
IF %ERRORLEVEL% == 1 exit

希望这可以帮助 :)

于 2012-08-24T15:15:22.573 回答
0

java.lang.System没有exit没有参数的方法,所以System.exit();会是编译错误。(System.exit(1);但是,会很好。)您的代码不起作用的原因可能是您没有重新编译它,因此您仍在运行添加该行之前的一些旧版本。

于 2012-08-24T14:28:25.653 回答
0

假设您正在尝试从 java 安装 firefox .bat 文件

public static void main(String[] args) throws InterruptedException {
    try {
        String[] command = { "cmd.exe", "/C", "Start", "C:\\firefox.bat" };
        Runtime.getRuntime().exec(command).waitFor();
    } 
    catch (Exception e) 
    {
        System.out.println("Execution error");
    }
}

这将触发命令提示符并打开窗口,直到您在安装 firefox 后手动关闭它。

解决方法是在您的 .bat 文件中,在您的命令之后只需放置一个“ exit ”例如:

您的 firefox.bat 将包含

@Start /wait "Firefox" "C:\Firefox Setup 41.0.exe" -ms

出口

这将关闭您的命令提示符窗口。希望这可以帮助...

于 2017-08-22T06:41:24.473 回答
-1

看看下面的链接

http://www.cs.bris.ac.uk/jot/decisions/exercise11/exit.html

程序必须返回退出代码的一般约定。退出代码应为零表示成功,非零表示失败。平台对不同的非零代码的含义有所不同,因此程序员通常只返回 1 作为失败的一般指示。

于 2012-08-24T14:25:10.863 回答
-1

System.exit(); 终止 JVM。int 是状态码(0 表示“正常”退出)。如果它没有退出,那是因为您的代码的那部分无法访问并且根本没有被执行。

Java API - System.exit()

于 2012-08-24T14:27:25.720 回答