Java Try/Catch语句未捕获异常

Java Try/Catch语句未捕获异常,java,exception,nullpointerexception,try-catch,numberformatexception,Java,Exception,Nullpointerexception,Try Catch,Numberformatexception,我试图在actionlistener的内部类中使用try/catch语句,但即使我故意触发异常,它也不会捕获异常。以下是代码摘录: btnPerformCalculation.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { double runtime = Math.abs(Double.parseDouble(tx

我试图在actionlistener的内部类中使用try/catch语句,但即使我故意触发异常,它也不会捕获异常。以下是代码摘录:

btnPerformCalculation.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent ae) {

        double runtime = Math.abs(Double.parseDouble(txtRunTime.getText()));
        double downtime = Math.abs(Double.parseDouble(txtDownTime.getText()));
        double blockedtime = Math.abs(Double.parseDouble(txtBlockedTime.getText()));
        double lineefficiency = 100 * runtime / (runtime + downtime + blockedtime);

        try {
            txtEfficiencyAnswer.setText(String.format("%.2f", lineefficiency));
        } catch (Exception e) {
            JOptionPane.showMessageDialog(frame, "Error:" + e.getMessage());
            txtRunTime.setText("0");
            txtDownTime.setText("0");
            txtBlockedTime.setText("0");
        }
    }
});
可能是setText抛出运行时异常

将catch语句更改为catch RuntimeException e 打印stacktrace。
首先,您如何确定JOptionPane.showMessageDialog没有引发异常?我建议将输出或日志记录作为捕获的第一条语句。其次,并非所有异常都是异常的子类。尝试使用catch-Throwable e查看您遇到的特定问题是否得到解决


我不建议在代码中保留catchThrowable e,因为这也会捕获非常低级的jvm问题。但它至少会帮助您了解发生了什么。

您捕获的唯一例外是在txtEfficiencyAnswer.setTextString.format%.2f,lineefficiency;中;。所有其他计算(例如将可能的空文本值转换为双精度值)都是在try块之前完成的,因此不会被捕获


假设txtEfficiencyAnswer是JTextComponent或JLabel,如果txtEfficiencyAnswer为null,则该块中出现异常的唯一明显原因是NullPointerException。如果不为空,然后,您将永远不会进入catch块。

请先标记您的问题,询问您使用的是哪种语言?您是否可以发布异常的堆栈跟踪?您是否确定该异常是从try而不是从之前行中完成的所有转换中引发的?您确定引发的异常不是RuntimeException?RuntimeException扩展了异常。感谢您的输入。作为响应,txtEfficiencyAnswer是一个JTextField。IDE说这是一个NumberFormatException,因为当程序需要一个数字时,我通过放置一个字母来测试程序。当我为程序输入数字时,它工作正常。我尝试使用NumberFormatException执行try-catch,但它仍然无法处理异常。@正如我所说的,ForgottenKahz:所有其他计算(例如,将可能的空文本值转换为双精度值)都是在try块之前完成的,因此无法捕获。这也适用于Double.parseDouble无法解析的文本,因此引发NumberFormatException。我重新查看代码时了解到,数字格式错误是在我的try/catch导致程序崩溃之前产生的。我将try语句移动到包含字符串的双重解析,结果try/catch语句工作正常。Throwable e不起作用,但值得一试。程序崩溃后,我在IDE中得到一个NumberFormatException描述。我注释掉了JOptionPane.showMessageDialog,改为使用一个简单的System.out.Println。同样的问题。程序崩溃了,IDE中的对话框提到了NumberFormatException。当我通过触发想要捕获的bug,故意在任何字段中键入数字以外的内容时,就会出现此问题。正如@bluesman所建议的,这表明异常是由try块之前的代码引发的。数字格式错误是在try/catch块的try部分之前产生的。当我移动try{}时,程序就捕获了从字符串到双解析的数字格式异常。