You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java质数检测程序异常处理失效问题求助

解决质数检测程序的控制台异常问题

问题根源

你当前代码中,BigInteger number = new BigInteger(textField.getText()); 这句代码写在try块外面。当用户输入非数字内容时,BigInteger的构造方法会直接抛出NumberFormatException,而这个异常不在try的捕获范围内,所以会被JVM输出到控制台,你的catch块根本没机会处理它。

修改方案

1. 核心代码调整(ActionListener部分)

将BigInteger的实例化逻辑移入try块内,同时优化组件重复添加的问题,并精准捕获异常:

button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        TheCode code = new TheCode();
        // 清空上一次的结果提示
        DisplayLabel.setText("");
        
        try{
            // 将BigInteger创建逻辑移入try块,确保转换异常被捕获
            BigInteger number = new BigInteger(textField.getText());
            code.primeDetector(number);

            if (TheCode.IsItPrime) {
                DisplayLabel.setText(number + " is prime.");
            } else {
                DisplayLabel.setText(number + " isn't prime.");
            }
            DisplayPanel.setVisible(true);
        }catch(NumberFormatException exception){
            DisplayLabel.setText("Enter a Valid Number");
            DisplayPanel.setVisible(true);
        }
    }
});

2. 初始化时提前添加Label到面板

在initialize方法中,创建DisplayLabel后,直接将它添加到DisplayPanel(避免每次点击按钮重复添加组件导致界面混乱):

DisplayLabel = new JLabel();
DisplayLabel.setFont(new Font("Times New Roman", Font.BOLD, 30));
// 提前将Label加入面板,无需每次点击都添加
DisplayPanel.add(DisplayLabel);

修改说明

  • 把BigInteger的实例化移入try块,确保输入无效时的转换异常能被catch捕获,不会泄露到控制台。
  • 使用NumberFormatException替代泛型Exception,精准捕获输入非数字的情况,避免误捕获其他无关异常。
  • 提前绑定DisplayLabel与DisplayPanel,解决重复添加组件导致的界面布局问题。

内容的提问来源于stack exchange,提问作者Ahmed Hamdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 06:37:22