1

我有一个 JList 和一个字符串,它是 JList 的选择。如果单击 JButton,它将显示您的 JList 选择。如果你不点击一个 JList 选择,它会返回一个错误,所以我使用了 try catch,但它仍然返回一个错误。

这是我的代码,编辑器中没有错误。:

@Override
public void actionPerformed(ActionEvent e) {
    String choice = chooser.getSelectedValue().toString();
    String companyname = name.getText();
    try{
        JOptionPane.showMessageDialog(frame,"<html> Welcome to your new Company!<br><br>Company type: " + choice + "" + "<br>" + "Company Name: "  + companyname  + "" +"</html>"  );   
    }catch (Exception e1){
        JOptionPane.showMessageDialog(frame, "Please fill in both inputs");
    }
}           

如果没有错误,尝试也可以正常工作,但捕获不起作用。我还尝试捕获 NullPointerException 和 if ,else if choose = null,但它仍然不起作用。甚至选项窗格都不会弹出 null 在它的位置。

4

3 回答 3

4

究竟在哪里会发生异常?

try{
    String choice = chooser.getSelectedValue().toString();
    String companyname = name.getText();
    JOptionPane.showMessageDialog(frame,"<html> Welcome to your new Company!<br><br>Company type: " + choice + "" + "<br>" + "Company Name: "  + companyname  + "" +"</html>"  );   
}catch (Exception e1){
    JOptionPane.showMessageDialog(frame, "Please fill in both inputs");
}

可能是一个更好的解决方案,因为如果没有选择任何内容JList#getSelectedValue就会返回null......但是你需要抓住一个NullPointerExceptionorThrowable而不是Exception

更新了示例

异常分支不是设计应用程序的好方法。应使用异常来捕获意外状态。您似乎期望得到无效的结果。

更好的方法是依次实际检查每个值并确定它们是否有效。

    Object value = chooser.getSelectedValue();
    if (value != null && value instanceof String) {
        String choice = chooser.getSelectedValue().toString();
        String companyname = name.getText();
        if (companyname != null && companyname.trim().length() > 0) {
            JOptionPane.showMessageDialog(frame,"<html> Welcome to your new Company!<br><br>Company type: " + choice + "" + "<br>" + "Company Name: "  + companyname  + "" +"</html>"  );   
        } else {
            JOptionPane.showMessageDialog(frame, "The company name is invalid, please provide one");
        }
    } else {
        JOptionPane.showMessageDialog(frame, "Your company type choice is invalid, please select one");
    }
于 2013-07-11T23:32:06.657 回答
1

我相当肯定showMessageDialog()不会抛出任何异常,如果有的话可能只是一个空指针。也许试试 if-else。

编辑这是一些代码,这应该可以完全替代。代码:

if(! choice == null){
    if(!companyname.equals("");){
        JOptionPane.showMessageDialog(frame, "<html> Welcome to your new Company!<br><br>Company type: "+ choice + " " + "<br>" + "Company Name:"  + companyname  + "" +"</html>");
    }else{
        JOptionPane.showMessageDialog(frame, "Please fill in the company name!");
    }
}else{
    JOptionPane.showMessageDialog(frame, "Plaease fill in choice!");
}
于 2013-07-11T23:34:03.967 回答
0

您实际上不能保证对话框的显示将在调用线程上完成 - 如果showMessageDialog()从后台线程调用,UI 仍将显示在事件线程上 - 调用线程将被阻塞,直到它关闭。

如果 UI 确实引发了异常,它将发生在不同的线程上并且不会传播到您的代码(查看 AWT 事件队列的源代码以了解其机制)。

于 2013-07-12T01:37:27.447 回答