尝试并抓住不工作的JOptionPane(Java)

时间:2013-07-11 23:29:09

标签: java swing try-catch joptionpane

我有一个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,如果,如果select = null,但它仍然无效。即使选项窗格在其位置弹出也为空。

3 个答案:

答案 0 :(得分: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");
}

MIGHT 是一个更好的解决方案,因为如果没有选择任何内容,JList#getSelectedValue将返回null ...但是你需要捕获{{1 }或NullPointerException代替Throwable

更新了示例

异常分支不是设计应用程序的好方法。应该使用例外来捕获意外状态。你似乎在期待无效的结果。

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

Exception

答案 1 :(得分: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!");
}

答案 2 :(得分:0)

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

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