【问题标题】:display exception in JTextField在 JTextField 中显示异常
【发布时间】:2017-01-24 07:34:58
【问题描述】:

我的代码做了一些运算来将二进制输入转换为十进制输出。我还创建了一个扩展 NumberFormatException 的异常类,以在输入不是 1 或 0 时抛出错误。我想要的是将异常抛出到 JTextField。

    private void biTodeciActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
String binary;
binary = binaryStringText.getText();
int total = 0;
for(int i = 0; i < binary.length(); i++)
{
    if (binary.charAt(i) != '0' && binary.charAt(i) != '1')
    {
        throw new ParseMethods.BinaryNumberFormatException(binary.charAt(i)+" is not"
                +" a valid binary input.");
    }
    else if(binary.charAt(i) == '1'){
        total += Math.pow(2, (binary.length()-1)-i );
    }
}

deciOut.setText(""+total);
}

【问题讨论】:

  • 您不能 throw 未定义方法的异常。所以你有点坚持下去。在你的情况下,我只需调用文本字段的setText,传递你想要的信息(假设你想在字段中显示异常)或更实际地,使用JOptionPane 来显示错误消息

标签: java exception throw


【解决方案1】:

本质上,您尝试做的事情是行不通的。 BinaryNumberFormatException 没有声明它会引发任何异常(假设您使用的是 NetBeans),您将无法(轻松)修改它。

您可以将所有代码包装在方法内的 try-catch 块中,但这只是,嗯,有点混乱(恕我直言)

相反,我可能会创建一个进行对话的类,例如...

public static class BinaryConverter {
    public static String toDecimal(String binary) throws BinaryNumberFormatException {
        //...
    }

    // Maybe a toBinary method as well...
}

例如。 toDecimal 声明它会抛出 BinaryNumberFormatException (尽管我认为某种解析异常会更好)

然后在你的action执行方法中,你可以做类似...

private void biTodeciActionPerformed(java.awt.event.ActionEvent evt) { 
    try {
        deciOut.setText(BinaryConverter.toDecimal(binaryStringText.getText()));
    } catch (BinaryNumberFormatException exp) {
        exp.printStackTrace();
        deciOut.setText(exp.getMessage());
    }
}

这将允许以更简洁的方式处理操作成功和不成功。

这使代码更易于重用和管理。

作为一个想法

【讨论】:

  • 好吧,我已经有了 paseBinary 的方法,它接受一个字符串输入并返回一个 int。但是当我尝试在 biTodeciActionPerformed(java.awt.event.ActionEvent evt) 中调用它时,Netbeans 告诉我它不知道该方法。它们都在默认包中。
  • 如果没有 runnable example 来证明您的问题,就不可能知道代码还有什么问题。
  • 我让它工作了。您的回答对我帮助很大,谢谢!
  • 很高兴能帮上忙 ;)
【解决方案2】:

以 STRING 格式将异常直接打印到文本字段中 deciOut.setText(""+exp);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多