我有一个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,但它仍然无效。即使选项窗格在其位置弹出也为空。
答案 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事件队列的源代码以了解其中的机制)。