【发布时间】:2017-12-08 19:09:27
【问题描述】:
我需要处理空输入并从输出中删除堆栈跟踪。
这是我的代码的 sn-p:
public class TestShape
{
public static void main(String args[])
{
for(int i = 0; i < args.length; i++)
{
try
{
Integer.parseInt(args[i]);
}
catch(NumberFormatException nfe)
{
System.err.println("\n" + "NumberFormatException is caught" + "\n" + "Please input 1, 2 or 3 valid numbers only");
}
if (args.length==0 ||args.length>3||Integer.parseInt(args[i])<0)
throw new IllegalArgumentException("\n" + "IllegalArgumentException is caught" + "\n" + "Please input 1, 2 or 3 valid numbers only");
}
我有两个问题,首先是当用户在命令行上没有输入值时,它应该抛出 IllegalArguementException 和相应的错误消息。当我运行此代码并且不输入任何值时,它会运行而不会引发异常。它看起来像这样:
C:\Users\XXX\Desktop\Folder>java TestShape
C:\Users\XXX\Desktop\Folder>_
第二个问题是当我尝试其他异常(使用字符串而不是 int、负数、超过 3 个数字等)时,它会输出正确的消息,但也会打印出堆栈跟踪:
C:\Users\Chef Boi Logro\Desktop\Folder\ICS 112\Lab 练习\LE8\New>java TestShape -1 2 -3
线程“主”java.lang.IllegalArgumentException 中的异常:
IllegalArgumentException 被捕获 请输入 1、2 或 3 有效 仅限数字 在 TestShape.main(TestShape.java:19)
我需要的是终端只显示错误消息,没有堆栈跟踪。
【问题讨论】:
-
我相信您的程序的第一个参数是程序本身的名称。您是否尝试过在代码中打印
arg[0]并在没有参数的情况下运行? -
@Nathan 在此处检查接受的答案:stackoverflow.com/questions/24339479/… 如果未输入任何参数,则 args 的长度可以为 0
-
@ArvindSasikumar 确实,我误认为
Cargs ^^ 这与问题无关,因为args.length == 0时甚至没有进入循环。 -
是的,Eran 的回答是对的。