2011-12-06 4 views
26

私はかなりアンドロイドの問題やJavaの問題それを自己と混同しています。Java:例外自体がnullです

Bluetoothで動作するアンドロイドアプリケーションをデバッグしているときに、フローがIOExceptionというキャッチブロックで停止しましたが、後で例外eがnullであることがわかりました。 InputStream

はい、それはNullPointerExceptionではありませんでしたが、他の種類の例外はnullです。Better say throw un un initialized。

可能ですか?そのようなユニット化された例外はどのシナリオで投げられることができるか??

An exception is null.... ITS NOT A NULL POINTER EXCEPTION

+6

'throw null;'? – Dimme

+0

Pls。例外をスローするコードサンプルを追加します。 – Azodious

+0

既に接続されているデバイスとBluetoothInputStream.read()を呼び出すだけです...しかし誰かが興味を持っている場合は、証明としてスナップショットを作成しようとしています...... – Prasham

答えて

-2

Javaでは、あなたはnullをスローすることによってNullPointerExceptionを投げることができます。この場合、最終的に投げることができるのはNullPointerExceptionです。

public static void main(String[] args) 
    { 
     try{ 
      a(null); 
     } 
     catch(Exception e) 
     { 
      System.out.println(e); 
      e.printStackTrace(); 
     } 
    } 
    public static void a(String[] args) 
    { 
     throw null; 
    } 

出力:

java.lang.NullPointerException 
java.lang.NullPointerException 
at scjp.Scjp.a(Scjp.java:18)  
at scjp.Scjp.main(Scjp.java:8) 
+1

私が投稿したスクリーンショットを見る.....私は今あなたがそれを見た後で答えを変えなければならないと思う..... :) – Prasham

+0

彼が持っているエラーはnullpointerexceptionではないが例外自体はnullである –

0

あなたはおそらく、あなたのデバッガにだまされています。

その行の下に別の行のコード(if(false) log.v("","");のように使用できないもの)を追加してそこから離れ、例外の値をチェックします。

また、Log.e(TAG, "my null exception", e);を試してログを読んでください。

+0

同じではありません – Prasham

+0

ログにはそのスロー可能なものが表示されるはずですが、スローされる可能性があるのはおそらくnullです... "null null exception"よりも何も表示されません – Prasham

+0

"デバッガに騙されている"という表現は必ずしも誤解に限定されません。それを単に誤って報告するだけではありません。 –

-1

あなたがたInputStreamから読み取るしようとすると、それが発生した場合は、このリンクを見て、私はそれは同じ問題だかはわからないが、私はすでに同様の質問に答えました... ...

Android Bluetooth connection issue

+0

友人はいません!!それは同じ問題ではない、実際には私はこの問題を取り除きたいとは思っていません、ちょうどその理由、特にその理由について興味があった.... – Prasham

+1

ああ大丈夫!したがって、例外がどのように処理されるのかを理解するだけであれば...例外としてnullを投げる(例外はオブジェクトです!)javaでは可能です... http://www.adarshr.com/papers/npe – Swordfish90

14

可能でしょうか?そのようなユニット化された例外はどのシナリオで投げられることができるか??

準拠のJavaコンパイラおよび準拠のJava仮想マシン、および準拠したDavlik仮想マシンを使用することはできません。 JLSはe変数は、その場所

どちらかあなたがバグだらけの仮想マシン、バギーデバッガ、またはあなたのIDEの問題を持っているでnull可能なツールおよび/またはプロセスを構築することはできません。

私があなたの状況にあった場合は、デバッガを今すぐ使用して停止し、コードに昔ながらのトレースプリントを追加することにします。また、ソースからクリーンで完全なビルドを行うことを確認してください。


に考慮すべきもう一つの可能​​性はJREが実行時に報告された(とデバッガが頼っていること)行番号は、ソースコード内の行番号と並んされていないということです。これは、ビルドプロセスとデプロイプロセスで間違いを犯した場合に発生します。間違いは、ファイルの保存を忘れる、ビルドするのを忘れる、新しいバージョンのアプリケーションをインストールすることを忘れる、IDEをファイルシステムと同期させることを忘れるようなものかもしれません。


理論はこれがthrow null;または同等のものによって引き起こされるということですFWIWは、水を保持していません。 JLS section 14.18は言う:

「Expressionの評価がNULL値を生成し、正常に完了した場合には、クラスのNullPointerExceptionのインスタンスV」を作成し、nullの代わりにスローされます。」

あなたは、そのコンテキストでその文を読めば、理解することは簡単ですが、throw null;が実際にNullPointerExceptionをスローすることを明確に言っています。


UPDATE

私はこのSO問題のもう一つのもっともらしい説明が見つかりました:、Exception is NULL always

は基本的に、エミュレートコードはEclipseが認識していない例外がスローされていることを言っているのEclipseエミュレータはnullを「有益に」代用しています。それはエミュレータのバグのように聞こえる。

+0

IMHO this甘い答えです! – lucapette