尝试捕获不工作的JOptionPane(Java)

尝试捕获不工作的JOptionPane(Java),java,swing,try-catch,joptionpane,Java,Swing,Try Catch,Joptionpane,我有一个JList和一个由JList选择的字符串。如果单击某个JButton,它将显示您的JList选择。如果不单击JList选择,它将返回一个错误,因此我使用了try catch,但它仍然返回一个错误 这是我的代码,编辑器中没有错误: @Override public void actionPerformed(ActionEvent e) { String choice = chooser.getSelectedValue().toString(); String compan

我有一个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");
    }
}           

而且,如果没有错误,try也可以正常工作,但是catch就是不起作用。我还尝试捕获NullPointerException和if,else if choose=null,但仍然无法工作。甚至选项窗格也不会弹出空框。

哪里会发生异常

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");
}

哪里会发生异常

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");
}
我很确定showMessageDialog不会抛出任何异常,如果有的话,可能只是一个空指针。也许试试别的

编辑这里是一些代码,这应该作为一个完整的替代工作。 代码:

我很确定showMessageDialog不会抛出任何异常,如果有的话,可能只是一个空指针。也许试试别的

编辑这里是一些代码,这应该作为一个完整的替代工作。 代码:


实际上,您无法保证对话框的显示将在调用线程上完成-如果从后台线程调用showMessageDialog,UI仍将显示在事件线程上-调用线程将被阻止,直到关闭


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

您实际上无法保证在调用线程上显示对话框-如果从后台线程调用showMessageDialog,UI仍将显示在事件线程上-调用线程将被阻塞,直到关闭为止


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

您可以补充说,他只需检查null,而不必捕获NullPointerException。@DaoWen Fingers键入的速度没有那么快:p..,但是您需要捕获一个错误NullPointerException或Throwable代替Exception。。不喜欢它,捕获RuntimeException如果发生错误,我怀疑你能做些什么。。此外,companyname.trim.length>0 company.trim.isEmpty将为better@nachokk我同意,因此更新。OP的代码永远不会捕获NullPointerException,因为它是RuntimeException/Error/Throwable,而不是异常,因此会出现注释。更好的是,如果他们真的担心,他们应该尝试使用UncaughtExceptionHandlerinstead@nachokk但使用异常作为决策分支仍然是一种不好的做法。您可以补充说,他可以只检查null而不是捕获NullPointerException。@DaoWen Fingers没有那么快地键入:P..,但是您需要捕获NullPointerException或Throwable而不是例外不喜欢它,捕获RuntimeException如果发生错误,我怀疑你能做些什么。。此外,companyname.trim.length>0 company.trim.isEmpty将为better@nachokk我同意,因此更新。OP的代码永远不会捕获NullPointerException,因为它是RuntimeException/Error/Throwable,而不是异常,因此会出现注释。更好的是,如果他们真的担心这个问题,他们应该尝试使用UncaughtExceptionHandlerinstead@nachokk但将异常用作决策分支仍然是一种糟糕的做法。
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!");
}