2009-03-24 20 views
2

私はこの方法では、SQLExceptionをスローしなければならないと言ってNetBeansでのエラーを取得しています:Java - 例外をスローする必要がありますが、その方法は?

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

が私を許し、なぜ誰もが話している*だけ*程度のtry-catchをここに?それはオプションですが、唯一のオプションではありません。例外がスローされないのはなぜですか? なぜnetbeansはそれを許可しないのですか?私はNetbeans(私はEclipseを使用しています)を使用していませんが、IDEが生成されたコードを変更することを許さないというのは馬鹿げています。 – Nivas

答えて

8

が再びエラーメッセージを読んで、それはあなたに二つの選択肢を提供します。

例外をスローして宣言するか(実行できないか)、例外をキャッチする必要があります。第2の選択肢を試してください。

2

あなたはそれを投げなければならないと言っていません。それはあなたがそれをキャッチできると言います。したがって、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); 
} 

カップル良いオプションがあるかもしれない:

try { 
    ... 
} 
catch (SQLException e) { 
    System.out.println("Exception happened! Abort! Abort!"); 
    e.printMessage(); //Not sure if this is the correct method name 
} 
3

あなたはそうのように、getCustomerInfo()にお電話の周りにtry/catchブロックを配置する必要があり、例外をログに記録し、詳細が使用します接続要求を再試行するための信号として使用することができます。あるいは、Outlaw Programmerが示すように、Exceptionを何らかの種類のRuntimeExceptionとして再スローすることができます。これにより、チェックの必要がなくなります。

9

一般に、コードがサポートしていないタイプの例外をスローする必要があり、そのインターフェイスを制御できない場合は、インターフェイスがサポートするタイプとして捕捉して再スローすることができます。あなたのインターフェイスはどのチェック例外を宣言していない場合、あなたはいつもの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を拡張する新しい例外の種類を作成し、その例外クライアントコードキャッチを持っていると思います。それ以外の場合は、NullPointerException、ArrayIndexOutOfBoundsExceptionなど、クライアントコードが処理できないANY RuntimeExceptionをキャッチするリスクがあります。

+0

問題を解決する正解を持っていることを+1しますが、OPがやるべきことになってしまうかもしれませんが、RuntimeExceptionsの隠れ事は一般的に悪い習慣とみなされます。 :D – rmeador

+0

それはいくつかの悪い習慣と考えられています。チェックされた例外(java言語には決してあってはならない)をチェックし、チェックされていない例外にそれをラップするのは良いことです。 Hibernateはすべての場合にこれを行います。 – jsight

+0

問題をより明確に説明するために回答を編集しました。 RuntimeExceptionsに問題はありませんが、クライアントが少なくとも呼び出しが失敗した理由を少なくとも知ることができるように、新しいタイプを作成する価値はあると思います。 –

1

NetBeansで生成されたコンポーネントには変更不可能なコードがあり、GUIビルダーの一部として生成されていると推測しています。私はこれが事実かどうか尋ねるだろうが、私はまだコメントすることはできません。 GUIエディタで生成されたオブジェクトを選択すると、右側にコードの淡色領域を変更するためのタブ "code"があります。

ここ


Code tab that is used to modify generated code.

関連する問題