2016-04-01 6 views
0

例外を正常に試行してキャッチする方法がわかりません。ご覧のとおり、私はすでにtry-catchステートメントを開始しましたが、終了方法はわかりません。私はエラー ":エラー:tractorException.java:83報告されていない例外tractorExceptionを、捕まえたり がsetVehicleID(0)スローされるように宣言されなければなりません。" を取得Javaの例外に対してtry-catchメソッドを使用するのに問題があります

import java.io.*; 
import java.util.*; 
import javax.swing.*; 

public class tractorException extends Exception { 
    protected int VehicleID; 

    public int setVehicleID(int VehicleID) throws tractorException { 
     if (VehicleID <= 0 || VehicleID > 100000) { 
      throw new tractorException(); 
     } else { 
      this.VehicleID = VehicleID; 
      return this.VehicleID; 
     } 
    } 

    public int getVehicleID() { 
     return this.VehicleID; 
    } 

    tractorException() { 
     setVehicleID(0); 
    } 

    public static void main (String[] args) { 
     try { 
      throw new Exception("Something went wrong!!"); 
     } catch (Exception e) {    
     } 
+0

危険な方法であるので、あなたが直接setVehicleIDメソッドを呼び出すことはできませんを入力してみてください達成するために?無限に例外をスローするクラスですか? –

+0

はい例外をスローするクラスを達成しようとしています – MajorJavaUser

答えて

0

がにあなたのmain方法を変更します。

public static void main (String[] args) { 
     try { 
     throw new tractorException(); // infinite loop ensues 
     } catch (Exception e) { 
     // this catch doesn't matter 
     } 
} 

tractorExceptionのコンストラクタがsetVehicleID(0)を呼び出すため、無限ループが発生します。これは、throw new tractorException()を呼び出します。これは、あなたが推測したように、無限大以上のsetVehicleID(0) ...を呼び出します。

+0

プログラムをコンパイルするには、コンストラクタが 'tractorException'をスローすることも宣言する必要があります。 –

+0

プログラムが 'tractorException'をスローするとプログラムがコンパイルされるとは思わないが、Javaコンパイラは無限ループが起こることを伝えるのに十分スマートだと思う。 –

+0

それは:http://ideone.com/oa9TN8これは明らかに全く無意味です。 –

0

例外をスローする関数をキャッチしたり、宣言してスローする必要があります。あなたのコードで問題が投稿されたエラーログに記載されているsetVehicleID(0);行にあります。

setVehicleID()メソッドでは例外がスローされるため、この関数を呼び出すたびにキャッチまたは再スローする必要があります。あなたのエラーを修正するには、トライキャッチでこのコールを囲む必要があります。

tractorException() 
    { 
    try{ 
     setVehicleID(0); 
    } 
    catch(tractorException e) { 
     // Do something with error 
    } 
    } 
+0

また、setVehicleID(0)は値渡しの例外を0として生成するので、setVehicleID(0)..などを呼び出すコンストラクタを呼び出します。基本的には無限ループ –

+0

このコードをメインメソッドに入力しますか? – MajorJavaUser

+0

上記のtry-catchブロックを持つように、あなたのコードのtractorException()を更新したいとします。これにより、現在行っているコンパイルの問題が解決されます。 –

0

この

それはあなたが何をしようとしている

tractorException() { 
try{ 
    setVehicleID(0); 
}catch(Exception e){ 

} 
} 
関連する問題