Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> NullPointerException 
:(
    Опции темы
MadMas
  Дата 5.5.2006, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



MIDlet Компилируется без ошибок. При запуске вылетает со следующим текстом 
 «Running with storage root DefaultColorPhone
Unable to create MIDlet null
java.lang.NullPointerException
    at com.sun.midp.midlet.MIDletState.createMIDlet(+14)
    at com.sun.midp.midlet.Selector.run(+22)» 
    
Используется J2ME Wireless Toolkit 2.0. Сам код полностью содран с туториала. 
Код
import javax.microedition.midlet.*; 
import javax.microedition.lcdui.*; 

public class ChoiceThat extends MIDlet implements CommandListener {
    private Command exitMidlet = new Command ("Выход", Command.EXIT, 0);
    private Command vibor = new Command ("ВЫБРАТЬ", Command.SCREEN, 1);
    private Command vozvrat = new Command ("ВОЗВРАТ", Command.BACK, 0);
    private ChoiceGroup groupPopup;
    private Form myform;
    private Display mydisplay;
    
    public ChoiceThat() {
        mydisplay = Display.getDisplay(this);
    }
    private String[] mygroup = {"Флаг 0", "Флаг 1", "Флаг 2", "Флаг 3"};
    
    public void startApp () {
        
        groupPopup = new ChoiceGroup ("Group Popup", ChoiceGroup.POPUP, mygroup, null);
        myform = new Form ("Встроенный ChoiceGroup");
        myform.append(groupPopup);
        myform.addCommand(exitMidlet);
        myform.addCommand(vibor);
        myform.addCommand (vozvrat);
        myform.setCommandListener(this);
        mydisplay.setCurrent(myform);
    }
    
    public void pauseApp() {}
    public void destroyApp (boolean unconditional) {}
    public void commandAction (Command c, Displayable d) {
        if (c == exitMidlet) {
            destroyApp(false);
            notifyDestroyed();
        }
        if (c == vozvrat) {
            mydisplay.setCurrent(myform);
        }
        if (c == vibor) {
            int i = groupPopup.getSelectedIndex();
            if (i == 0) {
                Form formPopup = new Form ("It's formPopup" + mygroup[0]);
                formPopup.append(mygroup[0]);
                formPopup.addCommand(vozvrat);
                formPopup.addCommand(exitMidlet);
                formPopup.setCommandListener(this);
                mydisplay.setCurrent(formPopup);
            }
            if (i == 1) {
                Form formPopup = new Form ("It's formPopup" + mygroup[1]);
                formPopup.append(mygroup[1]);
                formPopup.addCommand(vozvrat);
                formPopup.addCommand(exitMidlet);
                formPopup.setCommandListener(this);
                mydisplay.setCurrent(formPopup);
            }
            if (i == 2) {
                Form formPopup = new Form ("It's formPopup" + mygroup[2]);
                formPopup.append(mygroup[2]);
                formPopup.addCommand(vozvrat);
                formPopup.addCommand(exitMidlet);
                formPopup.setCommandListener(this);
                mydisplay.setCurrent(formPopup);
            }
            if (i == 3) {
                Form formPopup = new Form ("It's formPopup" + mygroup[3]);
                formPopup.append(mygroup[3]);
                formPopup.addCommand(vozvrat);
                formPopup.addCommand(exitMidlet);
                formPopup.setCommandListener(this);
                mydisplay.setCurrent(formPopup);
            }
        }
    }
}


Подскажите, в чем дело? С такой же ошибкой вылетает еще несколько мидлетов, тоже содранные из учебников.  
PM   Вверх
WildChild
Дата 5.5.2006, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 24.8.2005
Где: Российская Федера ция

Репутация: нет
Всего: нет



Ты знаешь, у меня все работает нормально... Хотя у меня WTK22.
И ещё, я, конечно, могу ошибаться, но попробуй вот эти строчки:
Код
int i = groupPopup.getSelectedIndex();

заменить следующим
Код
try {
    int i = groupPopup.getSelectedIndex();
} catch (NullPointerException e) {}


Или ещё, так как у тебя идет проверка на
Код
 if (c == vibor) {

то не факт, что переменная i будет инициализирована. Поэтому, попробуй до проверки проинициализировать ее (нулем хотя бы). В этом случае можно будет обойтись без блока try-catch, мне кажется.
И вообще, лучше инициализировать переменные после их объявления. Мне кажется, это правило хорошего программирования...
Хотя, это всего лишь мое мнение.

Удачи! 
--------------------
Don't give up without even trying
PM MAIL   Вверх
MadMas
Дата 6.5.2006, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



А может быть проблема в самом WTK? Поможет ли мне установка более свежей версии? 
PM   Вверх
Dancer
Дата 6.5.2006, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

Репутация: 33
Всего: 37



скорее всего ты где-то налажался.
Ошибка в 14 строке, а это ни что иное как groupPopup = new ChoiceGroup ("Group Popup", ChoiceGroup.POPUP, mygroup, null);
в документации написано:
Throws: 
NullPointerException - if stringElements is null 
NullPointerException - if the stringElements array contains any null elements 

По коду этих косяков не видно, но ноги здесь растут. 

Это сообщение отредактировал(а) Dancer - 6.5.2006, 15:58


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
Nemesis
Дата 6.5.2006, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 20.2.2005
Где: Москва

Репутация: 3
Всего: 5



Попробуй запустить чистый мидлет, без.. Вполне возможно, что у тебя не все "легло" как надо.

Код

import javax.microedition.midlet.*;    
import javax.microedition.lcdui.*;    

public class ChoiceThat extends MIDlet implements CommandListener {    

    public void startApp () {    
    }    
     
    public void pauseApp() {}    

    public void destroyApp (boolean unconditional) {}    

    public void commandAction (Command c, Displayable d) {    
    }    
}
 
--------------------
PM MAIL   Вверх
MadMas
Дата 12.5.2006, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



Nemesis, что должен мне дать запуск чистого мидлета? Можно как для кретинок объяснить?  
PM   Вверх
Nemesis
Дата 12.5.2006, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 20.2.2005
Где: Москва

Репутация: 3
Всего: 5



Этим мы проверим всю твою кухню. Если чистый мидлет запустится, значит ошибка в коде, если не запустится, то ошибка уже другого характера, к примеру, в установке sdk. 
--------------------
PM MAIL   Вверх
MadMas
Дата 13.5.2006, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



Nemesis, кухня проверилась и работает нормально. Если ошибка в коде, то почему он запустился у 
WildChild, а у меня не пашет? Меня именно этот вопрос больше волнует. 
PM   Вверх
Nemesis
Дата 13.5.2006, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 20.2.2005
Где: Москва

Репутация: 3
Всего: 5



Нашлась твоя ошибка. Как правильно сказал Dancer, она тут

groupPopup = new ChoiceGroup ("Group Popup", ChoiceGroup.POPUP, mygroup, null);

Видимо ты запускаешь на midp1.0, а вот эта шутка работает 

ChoiceGroup.POPUP

тока с midp2.0 

Это сообщение отредактировал(а) Nemesis - 13.5.2006, 12:08
--------------------
PM MAIL   Вверх
MadMas
Дата 14.5.2006, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



Nemesis, нет, все правильно - у меня в настройках midp 2.0 указан. 
PM   Вверх
Dancer
Дата 15.5.2006, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

Репутация: 33
Всего: 37



поставь 2.2 как и WildChild, для чистоты эксперимента (очень похоже что либо у тебя либы какие-то не совсем корректрые, или не подцепились корректные), либо косячок со стороны Sun (такое то же нельзя исключать, все мы люди, все мы человеки smile ) 


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
MadMas
Дата 15.5.2006, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



Поставила. Даже пробовала ставить все это на другой компьютер - результат тот же. Странно как-то.  
PM   Вверх
Dancer
Дата 15.5.2006, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

Репутация: 33
Всего: 37



ну ка, покажи мне свои PATH и CLASSPATH (что у тебя в этих переменных окружения содержится?)
команды для того чтобы увидеть что в этих перемнных находится - ниже приведены

set %PATH%   (set $PATH - это для  *nix)
set %CLASSPATH%   (set $CLASSPATH - это для *nix)

Да, и создай новое приложение в WTK заново, потом свой код туда подставишь (ну и если потребуется заменишь имя класса и имя конструктора). В профили приложения можешь оставить всё по умолчанию (Target platform -  JTWI)

Да, и ещё попробуй запустить UIDemo мидлет он идёт в поставке с WTK.

Твой код у меня нормально отработал. (WTK 2.2) 


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
Nemesis
Дата 15.5.2006, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 20.2.2005
Где: Москва

Репутация: 3
Всего: 5



Dancer, ведь "чистый " мидлет запускается... странно как-то.

MadMas, попробуй вот этот код:

Код

import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class CMain extends MIDlet
{

    protected void startApp() throws MIDletStateChangeException
    {
        Display.getDisplay(this).vibrate(1000);
    }

    protected void pauseApp()
    {
    // TODO Auto-generated method stub

    }

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException
    {
    // TODO Auto-generated method stub

    }

}

тут просто импользуется функция vibrate из midp 2.0. Почему-то мне кажется дело в профилях.

P.S. Кстати, попробуй в коде, который в начале поста, вместо ChoiceGroup.POPUP написать ChoiceGroup.EXCLUSIVE. Интересно, ошибка будет или нет. 
--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0651 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.