2012-01-13 8 views
1

J2MEを通じてsetLocationListenerを使用して定期的な位置更新を行うためにNokia Symbian phoneにjsr-179 APiを実装しようとしています。エミュレータでは正常に動作しています。デバイスノキア5230にMidletをインストールしている間は、NullPointerExceptionが与えられ、アプリケーションは自動的に終了します。考えられる原因は何ですか?私はLocationExceptionを処理するための任意のコードを書いていないJ2MEでロケーションAPIを実装する際にNullPointerExceptionエラーが発生しました

以下

私は、NetBeans

class MovementTracker implements LocationListener { 

     LocationProvider provider; 
     Location lastValidLocation; 
     UpdateHandler handler; 
     boolean done; 

    public MovementTracker() throws LocationException 
    { 

    done = false; 
    handler = new UpdateHandler(); 
    new Thread(handler).start(); 

     //Defining Criteria for Location Provider 
     /* 
     Criteria cr = new Criteria(); 
     cr.setHorizontalAccuracy(500); 
     */ 


     //you can place cr inside getInstance 
    provider = LocationProvider.getInstance(null); 

     //listener,interval,timeout,int maxAge 
     //Passing -1 selects default interval 
     // provider.setLocationListener(MovementTracker.this, -1, -1, -1); 
     provider.setLocationListener(MovementTracker.this, -1, 30000, 30000); 

    } 

    public void locationUpdated(LocationProvider provider, Location location) 
    { 
    handler.handleUpdate(location); 
     batteryLevel = System.getProperty("com.nokia.mid.batterylevel"); 
     sn = System.getProperty("com.nokia.mid.networksignal"); 
     localTime = System.currentTimeMillis(); 

     Send_Location(); 
    } 

    public void providerStateChanged(LocationProvider provider, int newState) 
    { 
    } 

    class UpdateHandler implements Runnable 
    { 
    private Location updatedLocation = null; 

    // The run method performs the actual processing of the location 

    public void run() 
     { 
     Location locationToBeHandled = null; 
     while (!done) 
      { 
     synchronized(this) 
       { 
      if (updatedLocation == null) 
        { 
      try 
         { 
       wait(); 
      } 
         catch (Exception e) 
         { 
       // Handle interruption 
      } 
      } 
      locationToBeHandled = updatedLocation; 
      updatedLocation = null; 
     } 

     // The benefit of the MessageListener is here. 
     // This thread could via similar triggers be 
     // handling other kind of events as well in 
     // addition to just receiving the location updates. 
     if (locationToBeHandled != null) 
      processUpdate(locationToBeHandled); 
     } 
       try 
       { 
        Thread.sleep(10000); //Sleeps for 10 sec & then sends the data 
       } 
       catch (InterruptedException ex) 
       { 
       } 


    } 

    public synchronized void handleUpdate(Location update) 
     { 
     updatedLocation = update; 
     notify(); 
    } 

    private void processUpdate(Location update) 
     { 
     latitude = update.getQualifiedCoordinates().getLatitude(); 
      longitude = update.getQualifiedCoordinates().getLongitude(); 
      altitude = update.getQualifiedCoordinates().getAltitude(); 

    } 
    } 
} 
+0

警告を読み、解任後のMIDletを終了しているあなたは、コードを提供することができますに問題がありますか?好ましくは[SSCCE](http://www.sscce.org/)フォーム – gnat

+1

あなたの「回答」(http://stackoverflow.com/a/8877693/839601)のコードスニペットを質問にコピーしました。 "回答"を削除することをお勧めします – gnat

+0

私は間違っていますか? –

答えて

1
public MovementTracker() throws LocationException 

にフォーム上にこのクラスのオブジェクトをインスタンス化しています、私のクラスである...

コードは非常に危険な練習で、「Java Swallow Exception」のようなものをWebで検索してください。

実装の特質のため、ノキアはエミュレータがそれをスローしないLocationExceptionをスローします。あなたが例外を処理しないので、これは実際にNokiaのミッドレットをクラッシュさせる可能性があります - そして、あなたはそれを処理するためのコードを書いていないので、その理由を知らないでしょう。

どうすればその例外をキャッチできますか?

あなたがすることができる最も簡単な方法は、例外メッセージと警告を表示し、ユーザーが

関連する問題