2009-11-24 59 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