正如标题所示,我试图捕捉一个空字符串。我有一个类(我试图创建的对象的类),当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);
}
答案 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
}