2009-11-24 84 views
0

我在写一个简单的JAVA GUI来从JTextFrame读取SQL查询并执行它。连接和执行按钮都是JButton,但是编译器不会编译我的代码,因为我无法在我的侦听器私有类中为actionPerformed追加“throws SQLException”。我试着编写单独的方法,但同样的问题仍然存在。这里有一个例子:使用JButtons与JDBC执行SQL查询

public void connect() throws SQLException{ 
    conxn = DriverManager.getConnection(URL, Username, Password);} 
private class SelectBut implements ActionListener{ 
    public void actionPerformed(ActionEvent event){connect();}} 

编译器只是抛出在我这回:

TextFrame.java:123:未报告异常java.sql.SQLException中;必须被捕或宣布投掷
public void actionPerformed(ActionEvent event){connect();}}

有什么建议吗?

+0

接住或声明它抛出,就像*错误消息告诉你去*。你会意识到你不能声明它被抛出,所以我想你必须抓住它。哇,那很难。 – Bombe 2009-11-24 11:49:27

回答

3

由于SQLException是检查异常,所以您必须重新抛出或捕获它。

你的情况

您的actionPerformed方法可以是类似的东西:

public void actionPerformed(ActionEvent event){ 
    try{ 
     connect(); 
    }catch(SQLException e){ 
     e.printStackTrace(); 
    } 
} 

这里一个tutorial关于捕捉和处理异常

+1

是的,任何可能抛出一个execption的方法都必须在try/catch块内,或者调用此方法的方法必须重新抛出它。 – 2009-11-24 02:03:32

+0

由于actionPerformed方法不包含throws子句,因此不能在实现中抛出任何检查的异常。你必须抓住它。 – duffymo 2009-11-24 02:28:50

+2

对于它的价值,异常不应该像这样静静地吸收(或转换为运行时异常) - 这是将要发生在EDT上的调用,并且降低EDT并不是一个好主意。至少,显示带有错误消息的JOptionPane对话框。 在这里做的另一点是:数据库查询几乎肯定会是一个长期运行的任务 - 在EDT上运行是一个坏主意。我建议你多阅读一下开发Swing应用程序(SwingWorker在这里可能是个好主意) – 2009-11-24 03:55:56