在J2me上实现位置API时出现NullPointerException错误



我正试图通过J2me在诺基亚Symbian手机中实现jsr-179 APi,以便使用setLocationListener定期更新位置。在模拟器中,它运行良好。当我在设备nokia 5230上安装Midlet时,它被赋予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();
    }
    }
} 
public MovementTracker() throws LocationException


我没有编写任何用于处理LocationException的代码。

没有代码是非常危险的做法,只需在网上搜索类似"java燕子异常"的内容。

很有可能,由于实施细节的原因,诺基亚在模拟器没有抛出LocationException的地方抛出了LocationException。由于你不处理异常,这可能会让你在诺基亚的midlet崩溃-你不会知道原因,因为你还没有写过处理它的代码。

我怎样才能捕捉到那个异常?

您可以做的最简单的事情是显示一条Alert with exception消息,并在用户读取并解除警报后退出midlet

相关内容

最新更新