抓住空字符串。使用哪个例外?

时间:2015-03-31 10:24:40

标签: java swing exception

正如标题所示,我试图捕捉一个空字符串。我有一个类(我试图创建的对象的类),当String为null或为空时抛出异常(使用str.isEmpty检查)。 当我尝试在另一个类中使用空String创建对象时,它按预期工作并抛出异常。但是,我希望此类能够捕获该异常并通知用户。但它似乎永远不会捕获异常,即使我尝试编写Catch(Exception exc)。 现在我知道null或空字符串不是非法的。但我的意图是对象类本应该如此。相反,似乎捕获块根本不关心。我开始认为我必须创建自己的某种类型的异常类......或者是否有我遗漏的东西?以下是代码的相关部分:

对象类构造函数:

    public Valueables(String name){
    //name.trim().length() == 0
    if(name == null || name.isEmpty()){
        try {
            throw new Exception("Subclasses of Valueables cannot take in an empty String or null value for the \"name\" constructor");
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(2);
        }
    }
    else
        this.name = name;
}

另一个类(新的Trinket对象是Valueables的子类。上面有构造函数的那个​​):

while(loopPassErrorControl == false){

                        //I don't think the try loop is relevant. But just to make sure...
                        //Otherwise just ignore it

                        try{
                            TrinketForm Tform = new TrinketForm();
                            answer = JOptionPane.showOptionDialog(ValueablesFrame.this, Tform, "Nytt smycke", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,
                                    null, options , null);
                            if (answer != JOptionPane.OK_OPTION){
                            return;
                            }

                            valueablesList.add(new Trinket(Tform.getName(), Tform.getGemstones(), Tform.getMetalSelected()));
                            loopPassErrorControl = true;

                        }catch(NumberFormatException | NullPointerException exc) {
                        JOptionPane.showMessageDialog(ValueablesFrame.this, "Något gick fel");
                        }
                        }
                        //Test
                        for(Valueables obj : valueablesList){
                        System.out.println(valueablesList);
                        }

3 个答案:

答案 0 :(得分:3)

首先在Valuable上抛出RuntimeException:

public Valueables(String name){
    //name.trim().length() == 0
    if(name == null || name.isEmpty()){
        throw new RuntimeException("Subclasses of Valueables cannot take in an empty String or null value for the \"name\" constructor");

    }
    else
        this.name = name;
}

不要抓住异常。

其次,在另一个类上捕获一个RuntimeException并显示一个消息:

...}catch(RuntimeException exc) {
                        JOptionPane.showMessageDialog(exc.getMessage());
                    }

希望帮助你!

答案 1 :(得分:3)

已经提出了关于空字符串的问题,空字符串仍然不为空,因此它必须抛出" IllegalArgumentException"如果你想抓住它。

答案 2 :(得分:-1)

尝试将其作为通用异常捕获,替换NuumberFormatException和NullpointerException。

您也可以在Java中执行此操作。

try {
    //Some Code here
} catch (NumberFormatException | NullPointerException ex) {
    //Handle NumberFormat and NullPointer exceptions here    
} catch (Exception ex) {
    //Handle generic exception here
}