Java尝试并捕获

时间:2011-12-08 00:57:04

标签: java try-catch

我有一个应该处理Exception的java程序,但最终结果远非我想要的那样。这是我的程序的整体想法:它应该接受零输入并退出程序。输入对话框应该导致应该捕获的异常并打印消息“坏号”。

我的大脑告诉我,我在catch块中缺少一行代码。

这是我的代码:

import javax.swing.JOptionPane;


public class exceptTest {

    public static void main(String[] args){
        try {
            String line = JOptionPane.showInputDialog(null, "enter number");
        if(line.equals ("0"));
        System.exit(0);
        }catch(Exception e){

            JOptionPane.showMessageDialog(null, "bad number");
        }
    }
}

4 个答案:

答案 0 :(得分:1)

你在这里没有捕获异常,你只是在制作一个if语句,你只需要使用if / else。

try{ 
     String line = JOptionPane.showInputDialog(null, "enter number");
     if(line.equals ("0")){
          System.exit(0);
     }else{
        JOptionPane.showMessageDialog(null, "bad number");
     }
}catch (Exception ex){
     ex.printStackTrace();
}

你只能用于任何异常showInputDialog()抛出的捕获,但对于你的数字检查你没有捕获任何东西,它只是不是0.

答案 1 :(得分:1)

您不会执行异常处理代码,因为您从不抛出异常。代码将执行输入,然后测试输入等于“0”,然后根据它将显示或不显示对话框,然后它将执行。

抛出异常是因为某些事情发生在代码将处理的条件之外,或者是因为你明确地抛出一个异常。

通过“在条件之外”等,我的意思是除以0之类的东西.Java(也没有任何其他语言)会处理它,并且会抛出异常。程序处理的正常步骤将停止,并将调用执行处理程序。

在您的情况下,如果您(例如)尝试将输入解析为数字,但输入不是数字,则会出现异常。这是与您想要的功能不同的功能,但它更好地说明了异常的用途。像

这样的东西
try
{
int numberEntered = Integer.parse(line);
JOptionPane.showMessageDialog(null, "Entered a number, parsed to " + numberEntered);
}
catch (NumberFormatException nfe)
{
JOptionPane.showMessageDialog(null, "Did not enter a number, but <" + line + ">");
}

显示了异常通常有用的东西。

如果你愿意,你可以定义一个异常,称之为BadNumberException,并将其抛入你拥有的代码中 - 你会把它(我猜)放在if语句的else子句中。但是你的例程会抛出异常,我认为引发异常的例程也会异常捕获它。

希望有所帮助。 RC

答案 2 :(得分:0)

在if语句后面有一个分号,它会终止该行,编译器不会查找if的其余部分。删除你的分号,它会正常工作。

import javax.swing.JOptionPane;

public class exceptTest 
{

    public static void main(String[] args){
        try 
        {
            String line = JOptionPane.showInputDialog(null, "enter number");
            if(line.equals ("0")) //semi-colon removed here
            {
               System.exit(0);
            }
            throw new IllegalArgumentException("Input was not 0");
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(null, "bad number");
        }
    }
}

答案 3 :(得分:0)

如果输入不等于0,则代码不会抛出异常。因此,您永远不会捕获任何内容,因此屏幕上不会显示错误消息。

你可以做两件事:
- 如果输入不为0则抛出异常(然后你将进入捕获)

- 使用显示错误消息的else if(然后您不需要try-catch来检查输入是否为0)

编辑:当然,正如Hunter McMillen所注意到的,你需要在if语句后删除分号。