Ошибка NullPointerException при реализации API расположения на J2me
Я пытаюсь внедрить jsr-179 APi в телефон Nokia Symbian для периодического обновления местоположения с помощью setLocationListener через J2me. В эмуляторе все работает нормально. В то время как я установил Midlet на устройстве nokia 5230, ему выдается исключение 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();
}
}
}
1 ответ
public MovementTracker() throws LocationException
...
Я не написал никакого кода для обработки LocationException.
Никакой код не является очень опасной практикой, просто ищите в Интернете что-то вроде "исключений Java Swallow".
Вполне возможно, что из-за особенностей реализации Nokia выдает исключение LocationException, где эмулятор не выдает его. Поскольку вы не обрабатываете исключение, это может действительно привести к поломке мидлета в Nokia - и вы не будете знать причину этого, потому что, опять же, вы не написали код для его обработки.
Как я могу поймать это исключение?
Самое простое, что вы можете сделать, это отобразить Alert с сообщением об исключении и выйти из мидлета после того, как пользователь прочитает и отклонит предупреждение