2016-06-01 9 views
0

ボタンのアクションリスナーでメソッドを呼び出そうとしたときにエラーが表示される理由がわかりません。私はパネルを作成したレイアウトを流れるようにレイアウトを設定し、コンテンツ・ペインに追加し、その後、私はその後、購入方法にトライcatchブロックを作成しActionListenerで呼び出されたメソッドに例外をスローしようとしています

JButton buyButton = new JButton("Buy"); 
    panel.add(buyButton); 
    buyButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) {buy();}}); 

ここにボタンを...作成しました。.. 。

public void buy throws OverException 
{ 
    try{ 
     //tries the code 
    } 
    catch(OverException e){ 
     //does stuff... 
    } 
} 

しかし、それはキャッチまたはボタンを作成するときに)買いのメソッド呼び出し(でスローされるように宣言されなければならないことを言い続け。

答えて

1

コンパイラが明確に何を指示しているのですか:... must be caught or declared to be thrown in the method calling of buy()

OverExceptionは、actionPerformedまたはactionPerformedでキャッチされ、OverExceptionとする必要があります。

あなたはactionPerformedの宣言を変更するので、それは例外をキャッチすることはできません。

buyButton.addActionListener(
    new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
       try { 
        buy(); 
       } 
       catch(OverException ex) 
       { 
        // TODO error handling 
       } 
      } 
     }); 
+0

によって提案された方法は、私はまだゆっくり学んでいる:)ありがとう... – LynnLove

1

あなたは内部クラスとして新しいのActionListener()を追加し、実装する方法がのactionPerformed()です。 actionPerformed()内でbuy()を呼び出しています。あなたのコードを除いて、あなたは "OVerException"を吐き出すことができます。したがって、この例外は2通りの方法で処理できます:

  • コード自体の中で例外をキャッチします。あなたはそれを行いました。
  • 呼び出し側のメソッドに例外をスローし、どこで処理するかを指定します。これでこれを行いました。 public void buy throws OverExceptionですが、呼び出し元のメソッド(actionPerformed())はそれを処理しませんでした。ですから、コンパイルエラーに

方法1だ:

buyButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) {buy();}}); 

public void buy() 
{ 
try{ 
    //tries the code 
} 
catch(OverException e){ 
    //does stuff... 
} 
} 

を2 @ john3136

関連する問題