我在NetBeans中遇到错误,说我必须在此方法中抛出SQLException:
private void displayCustomerInfo(java.awt.event.ActionEvent evt)
{
int custID = Integer.parseInt(customerID.getText());
String info = getCustomerInfo(custID);
results.setText(info);
}
此方法由NetBeans创建,因此不允许我编辑签名并抛出异常。这就是我创建getCustomerInfo()
方法的原因。此方法会引发异常,因为它使用一种方法从数据库中检索有关客户的信息。
public String getCustomerInfo(int cid) throws SQLException
{
Customer c = proc.getCustomer(cid);
// get info
return "info";
}
getCustomer
方法也抛出异常并且proc.java编译。
确切的错误是
unreported exception java.sql.SQLException; must be caught or declared to be thrown
答案 0 :(得分:10)
通常,如果您的代码需要抛出签名不支持的Exception类型,并且您无法控制接口,则可以捕获并重新抛出接口支持的类型。如果您的接口未声明任何已检查的异常,则始终可以抛出RuntimeException:
private void displayCustomerInfo(java.awt.event.ActionEven evt)
{
try
{
int custID = Integer.parseInt(customerID.getText());
String info = getCustomerInfo(custID);
results.setText(info);
}
catch (SQLException ex)
{
throw new RuntimeException(ex); // maybe create a new exception type?
}
}
您几乎肯定想要创建一个扩展RuntimeException的新Exception类型,并让您的客户端代码捕获该异常。否则,您将冒着捕获任何RuntimeException的风险,包括NullPointerException,ArrayIndexOutOfBoundsException等,您的客户端代码可能无法处理它们。
答案 1 :(得分:8)
再次阅读错误消息,它为您提供了两个选择。
您必须将异常声明为抛出(您无法执行)或捕获异常。尝试第二种选择。
答案 2 :(得分:3)
您需要在调用getCustomerInfo()
时设置try / catch块,如下所示:
private void displayCustomerInfo(java.awt.event.ActionEvent evt)
{
int custID = Integer.parseInt(customerID.getText());
try {
String info = getCustomerInfo(custID);
} catch (SQLException sqle) {
// Do something with the exception
}
results.setText(info);
}
处理异常的几个好选项可能是:记录异常和用于获取异常的详细信息,或将其用作重试连接请求的信号。或者,正如Outlaw Programmer所示,您可以将Exception重新抛出为某种类型的RuntimeException,从而消除了检查的要求。
答案 3 :(得分:2)
它并没有说你必须抛弃它。它说你可以抓住它。所以使用try / catch块并处理它。
try {
...
}
catch (SQLException e) {
System.out.println("Exception happened! Abort! Abort!");
e.printMessage(); //Not sure if this is the correct method name
}
答案 4 :(得分:1)
NetBeans生成的组件具有不可修改的代码,我猜它是作为gui构建器的一部分生成的。我会问这是不是这样,但我还不能发表评论。如果在GUI编辑器中选择生成的对象,则在右侧有一个选项卡“代码”,可用于修改代码的灰色区域。
下面:
答案 5 :(得分:0)
我遇到过这个问题...过去2天一直困惑..然后我用sublime打开源码(.java文件),更改代码,保存,它可以创造奇迹......我我笑的时候看到这个有用......想在盒子外面真的有用......