3
if( currentTimeslot.isEmpty()){
         System.out.println("Do stuff");
            }

どうして私はNullPointerException?文字列がそうであるかどうかを確認しNULL、そうである場合は何かを行うにはどうすればよいですか?currentTimeslotが等しいときはいつでもNULLエラーが発生します。コンソールメッセージは次のとおりです。

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at PM.ui.MainFrame.getJPanelTopMenu(MainFrame.java:382)
4

6 に答える 6

2

自問すべき重要なこと:nullと empty は、あなたがしていることと論理的に同等ですか?

もしそうなら、あなたはこれを使いたいかもしれません:

if (currentTimeslot == null || currentTimeslot.isEmpty()) {
    // Do stuff
}

そのステートメントの前半が と評価されたtrue場合、Java は後半を気にしないため、null ポインター例外から保護されます。

別のアプローチは、データを正規化することです。null空の文字列を同じものとして扱いたい場合は、コードの早い段階で次のようにします。

if (currentTimeslot == null) currentTimeslot = "";

これで、使用するたびに防御的に null チェックする必要がなくなりました。

int例外が発生する理由について: Java では、すべてのオブジェクト ( 、 などのプリミティブ型ではない変数boolean) はnull、初期化するまで * です。そのオブジェクトのメソッドまたはフィールドにアクセスしようとすると、実際にはまだ存在しないものにアクセスするようにコードに要求しているため、null ポインター例外が発生します。Java では、オブジェクトが早期に初期化されることを確認するか、(if (variable != null) { ... }またはtry { ... } catch (NullPointerException npe) { ... }ブロックを使用して) 多くの防御的な null チェックを実行して、発生している問題を正確に防止する必要があります。

null*--もちろん、以外のもので初期化します。

于 2013-01-31T15:30:25.083 に答える
1
if(currentTimeslot==null){
    System.out.println("whatever");
}

コマンドcurrentTimeslot.isEmpty()は と同じでcurrentTimeslot.equals("")、null とは見なされず、単に空です。null であるか空であるかを確認したい場合は、次のように、1 つの if-case を別の if-case に入れる必要があります。

if(currentTimeslot==null){
    System.out.println("null string");
}
else{
    if(currentTimeslot.isEmpty()){
       System.out.println("empty string");}
     }

入れたいコマンドが多くて2回コピーする場合は、それらを関数に入れて関数を呼び出すか、どちらの場合もtrueになるブール変数を使用して、ブール変数がtrueかどうかを確認して実行することができます残りのコマンドは次のようになります。

 boolean empty;
if(currentTimeslot==null){
    System.out.println("null string");
    empty=true;
}
else{
    if(currentTimeslot.isEmpty()){
       empty=true;
       System.out.println("empty string");}
     }
 if(empty){
 ....
 .... }

お役に立てれば :)

于 2013-01-31T15:55:15.003 に答える
1

おそらくJavaは初めてです。Javaでは、オブジェクトはnullになる可能性があります。これは、そのオブジェクトにアクセスできるメソッドがないことを意味します。したがって、nullオブジェクトのメソッドにアクセスしようとするたびにNullPointerExceptionがスローされます。

これを解決するには、オブジェクトが null でないことを確認する必要があります。

        if ( currentTimeslot != null ){
            ....
        }

すべてのJava オブジェクトは java.lang.Object から拡張されるため、このチェックは String だけでなく、あらゆるタイプに関連します。

于 2013-01-31T15:19:29.923 に答える
0

ほとんどの文字列の空とnullのテストを手放すことをお勧めします。 Apache Commons Lang StringUtilsは、ほとんどの文字列操作(null、空、空ではない、すべて空白など)をずっと前に解決しました。

apachecommonslangをダウンロードして使用します。

コードは次のようになります。

if (StringUtils.isEmpty(currentTimeslot))
{
   ... react to an empty currentTimeslot .
}
else // currentTimeslot  is not emty (that includes not null).
{
   .. react to a not empt currentTimeslot 
}
于 2013-01-31T15:43:29.173 に答える
0

null ポインター例外が発生する場合は、currentTimeslot が null である可能性があります。したがって、最初に null でないかどうかを確認してから、そのメソッドのいずれかを呼び出す必要があります。

if(currentTimeslot!=null && currentTimeslot.isEmpty())...
于 2013-01-31T15:23:38.503 に答える