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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не могу найти ошибку 
:(
    Опции темы
Ракша
Дата 21.2.2007, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В общем по одному учебнику я написал код..., код компилируется но когда я его запускаю выдаётся такая ошибка : 
Unable to create MIDlet null
java.lang.NullPointerException
    at com.sun.midp.midlet.MIDletState.createMIDlet(+29)
    at com.sun.midp.midlet.Selector.run(+22)
 я представляения не имею что это могло бы значить.... В книге код даётся не полностью, а лишь основные части, сам код должен рисовать параболу.... по идеи. Сам код: 

import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;
import java.io.*;

public class Parabola extends MIDlet {

public void pauseApp(){
}

public void destroyApp(boolean unconditional){
notifyDestroyed();
}

public class Graph extends Canvas {
public void pauseApp(){
}

public void destroyApp(boolean unconditional){
}


public void paint(Graphics g){
int width = g.getClipWidth();
int height = g.getClipHeight();
g.setColor(255,255,0);
g.fillRect(0,0,width, height);
g.drawLine(width/2,0,width/2,height);
g.drawLine(0,height/2,width,height/2);
g.translate(width/2,height/2);
g.setColor(255,0,0);

for (int x = -width/2; x < width/2; x++){

int y = -x*x/40;
g.drawLine(x,y,x,y);
}
}


public void startApp() {

}

}


public void startApp() {
Graph graph = new Graph();
Display display = Display.getDisplay(this);
display.setCurrent(graph);
}

}

Это сообщение отредактировал(а) Ракша - 21.2.2007, 19:25
PM MAIL ICQ   Вверх
Antropoid
Дата 21.2.2007, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

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



Ну вот у меня, например, парабола нарисовалась. Т.е. код правильный.
Ты чем собираешь? А HelloWorld удалось запустить?


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
Dancer
Дата 21.2.2007, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



дык smile)), 100% не подключены библиотеки midpapi20.jar cldcapi11.jar. Если из командной строки собираемся то это нужно добавить в опцию -classpath или же в системную переменную окружения добавить ($CLASSPATH - unix, %CLASSPATH% - windows)
Если же под  каким-то IDE собираемся, то нужно очень внимательно посмотреть в настройках этого IDE, в них есть глобалные установки, а есть и локальные, для каждого проекта.
Если в WTK пытаемся это дело запускать, то должно быть всё нормально, но тут то же есть маленькие тонкости smile (смотрим на системные переменные окружения в основном)

Добавлено @ 19:57 
да и ещё, а нахрена в класс Graph запихали методы из класса унаследованного от MIDlet? (startApp(), destroyApp(),pauseApp())


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


Новичок



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

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



........
Dancer, чё?? О_о

В общем я чуть не застрелился когда узнал в чём ошибка... после часовой пытки компа...... Я каким-то непонятным фигом написал путь к иконке приложения  smile .... есть ещё один вопрос.

В другом мидлете, я эксперементировал с добавлением нескольких команд. Добавил команды c1,c2,c3,c4,c5
там код написал.... в общем запустил, вижу что на эмуляторе написано menu . Жму софт клавишу выползает высокоуровневое меню. Ну в общем с помощью джойстика выбираю команду с1...... бац, и такой прикол:
if (c == c1) setImage("1.png");
if (c == c2) setImage("2.png");
if (c == c3) setImage("3.png");
if (c == c4) setImage("4.png");
if (c == c5) setImage("5.png");
не работают.... тоесть он думает что неодна из перечисленных выше клавишь не нажата.... что за фигня?
зы: setImage("1.png") это написанная в ручную функция.... эта функция рабочая и точно добовляет картинку... только толка чтото нет....
PM MAIL ICQ   Вверх
Dancer
Дата 22.2.2007, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



используй try/catch - отловишь свои ошибки, там будет видно откуда ноги растут, без кода тебе тут вряд ли кто что скажет. Как варинт, посмотри, а ты в JAR точно свои картинки то получаешь? может быть ты ресуры не имеешь в JAR, вот они и не показываются, а выбрасывается Exception который ты неловишь, поэтому приложение и рушиться. Либо ловишь Exception но оставляешь его без внимания. Тут смотреть нужно, так ничего не скажу.


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

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



а код
Код

if (c == c1)
    System.out.println("Hello Java World");

работает?


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
Ракша
Дата 23.2.2007, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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


Antropoid, поставил на все команды.... неработает.... ну вот код:

import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;
import java.io.*;

public class Sample extends MIDlet implements CommandListener{

private Form mainForm;
private Form form;
private Image image;
private Display display;
private int menuChouse;
private int slideNum;

private Command c1;
private Command c2;
private Command c3;
private Command c4;
private Command c5;
private Command back;

public void pauseApp(){
}

public void destroyApp(boolean inconditional){
notifyDestroyed();
}

public void startApp(){
display = Display.getDisplay(this);
menuChouse = 1;
form = new Form(null);
mainForm = new Form(null);
mainForm .setCommandListener(this);
Command c1 = new Command("1.png",Command.OK, 1);
Command c2 = new Command("2.png",Command.OK, 1);
Command c3 = new Command("3.png",Command.OK, 1);
Command c4 = new Command("4.png",Command.OK, 1);
Command c5 = new Command("5.png",Command.OK, 1);
Command back = new Command("Back",Command.BACK, 2);

mainForm.addCommand(c1);
mainForm.addCommand(c2);
mainForm.addCommand(c3);
mainForm.addCommand(c4);
mainForm.addCommand(c5);
form.addCommand(back);

setImage("/1.png");

display.setCurrent(mainForm);


}

public void commandAction(Command c, Displayable d){
if (menuChouse == 1){
form.delete(0);
if (c == c1) System.out.println("Hello Java World");
if (c == c2) System.out.println("Hello Java World");
if (c == c3) System.out.println("Hello Java World");
if (c == c4) System.out.println("Hello Java World");
if (c == c5) System.out.println("Hello Java World");
menuChouse = 2;
display.setCurrent(form);
form.setCommandListener(this);
}else{
menuChouse = 1;
display.setCurrent(mainForm);
mainForm.setCommandListener(this);
}
}

public void setImage(String path){
    try {
    image = Image.createImage(path);
    }
    catch (IOException ioe){
    System.out.println(ioe.getMessage());
    }
    form.append(image);


    }


}

только как я картинки то перекину? ..... или сами чтоли поставьте свои.


PM MAIL ICQ   Вверх
Ракша
Дата 23.2.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ещё вот вопрос по ходу обучения появился.... а как убрать эту дурацкую полоску внизу экрана, на мобильнике? какой командой?.....  заранее спасибо.

с этим разобрался, спасибо.

Это сообщение отредактировал(а) Ракша - 23.2.2007, 18:05
PM MAIL ICQ   Вверх
Antropoid
Дата 23.2.2007, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

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



Ёклмн.........не так:
Код

Command c1 = new Command("1.png",Command.OK, 1);
Command c2 = new Command("2.png",Command.OK, 1);
Command c3 = new Command("3.png",Command.OK, 1);
Command c4 = new Command("4.png",Command.OK, 1);
Command c5 = new Command("5.png",Command.OK, 1);
Command back = new Command("Back",Command.BACK, 2);

а так:
Код

c1 = new Command("1.png",Command.OK, 1);
c2 = new Command("2.png",Command.OK, 1);
c3 = new Command("3.png",Command.OK, 1);
c4 = new Command("4.png",Command.OK, 1);
c5 = new Command("5.png",Command.OK, 1);
back = new Command("Back",Command.BACK, 2);

в своем коде инициализируешь локальные переменные, а не члены класса!

И еще не ясно зачем нужно:
Код

form.delete(0);

комментируй его.


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
Ракша
Дата 23.2.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



form.delete(0); - удаляет старую картинку.

О, а так как вы написали заработало....

PM MAIL ICQ   Вверх
Antropoid
Дата 23.2.2007, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

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



Цитата(Ракша @  23.2.2007,  18:13 Найти цитируемый пост)
form.delete(0); - удаляет старую картинку.

так новая картинка добавляется-то только единожды в startApp() - поэтому при повторном удалении несуществующей картинки возникает java.lang.IndexOutOfBoundsException.
Вообщем, пересмотри логику работы программы.


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
Dancer
Дата 23.2.2007, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Ракша @  22.2.2007,  20:29 Найти цитируемый пост)
Есть такой учебник некоего Е. Буткевича называется *Пишем Программы и игры для сотовых телефонов* в нашем Московском книжном на молодёжной стоит 150 р.

Я по нему начал учиться J2ME совершенно не зная яву. И вполне сносно всё понимаю. Единственное что жалко, в книге есть ошибки в кодах...  

ну просто, нельзя, практически не возможно не зная языка пытаться писать на J2ME. Это всё равно что, я не знаю правил русского языка, но могу запросто написать приказ ... (может получиться "казнить, нельзя помиловать!") как раз отсюда все твои ошибки. Нет бы основы малешко посмотреть, куда там smile, нам нужно сразу "в бой" smile)).
А про надаевшую строчку пока не расскажу smile, тебе ещё рано туда (в эти "верхние" слои). Хелло ворлд пока выводи в стандартных UI. smile)) (хинт: нужно испльзовать Canvas и уже на него отрисовывать все свои элементы, плюс в MIDP 2.0 вызывать setFullScreenMode(true) на объекте Canvas )


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


Новичок



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

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



>>так новая картинка добавляется-то только единожды в startApp() - поэтому при повторном удалении несуществующей картинки возникает java.lang.IndexOutOfBoundsException. 

это я понимаю. Не смог объяснить, просто голову недавно разбил,  smile плохо думаю теперь....

Линию внизу экрана я убрал, в канвозе я рисую, с методом paint я разобрался, с потоками разобрался и знаю метод run ..... вообще-то........ А так, ещё пара вопросов......

ВО первых, вот пишу я что icon мидлета "/mech.png" кладу в папку res эту иконку.... жму кнопку ран в тулките, вижу на экранчике эту иконку и название мидлета. Закрываю, пакую в яр файл.... жму на яд. Запускается тот же эмулятор, но иконки не видно, просто сразу идёт название мидлета. Та же самая фигня на мобиле, не выводится эта иконка.... чё за фигня? ....

второй вопрос, в проверке нажатых клавишь, есть четыре такие строчки:
Код

switch(keyCode){
    case KEY_NUM4: chousen=chousen-1; break;
    case KEY_NUM6: chousen=chousen+1; break;
    case LEFT: chousen=chousen-1; break;
    case RIGHT: chousen=chousen+1; break;
}


Запускаю. На 4 и на 6 код срабатывает, на джойстике лефт и райт не работает...., в книге было написано что Лефт и Райт это на мобильнике стрелки лево и право соответственно.... В чём я ошибся? Не работает ни джойстик ни в эмуляторе, ни в моём сиеменсе.

setFullScreenMode(true) - я это нашёл всё таки через поиск по форуму..... но всё равно спасибо за помощь, всем кто здесь мне помог.... вот....
PM MAIL ICQ   Вверх
W0LF
Дата 24.2.2007, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

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



Цитата

с потоками разобрался и знаю метод run ..... вообще-то

smile
Цитата

Запускаю. На 4 и на 6 код срабатывает, на джойстике лефт и райт не работает

Там по-людски написано - 
Цитата

MIDP defines the following game actions: UP, DOWN, LEFT, RIGHT, FIRE, GAME_A, GAME_B, GAME_C, and GAME_D.
Пame action may be associated with more than one key code
The application can translate a key code into a game action using the getGameAction(int keyCode) method

Код

switch(keyCode){
public void keyPressed(int keyCode) {
        if (keyCode == Canvas.KEY_NUM4) {
            chousen=chousen-1;
        }
         switch (getGameAction(keyCode)) {
            case Canvas.FIRE:
                
                break;
            case Canvas.LEFT :
                
                break;
            case Canvas.RIGHT :
                
                break;
            case Canvas.UP :
                
                break;
            case Canvas.DOWN :
                
                break;
        }
}


M
W0LF
Модератор: Пожалуйста, один топик - один вопрос.



--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
Ракша
Дата 24.2.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



W0LF, ааа..... заработало, спасибо.... если один топик - один вопрос, то этаж скоко топиков надо? А под книжкой я имел ввиду не документацию, а там одну, на русском. В документацию я не втыкаю ибо в английском не силён, совершенно.....

Мона последний вопрос... (надеюсь что последний):
В ЯВЕ НЕТУ ДВЕМЕРНЫХ МАССИВОВ????? ..... я не понял, пишу вот скажем:
menuAction = new String[8,8];
и не проходит.... может их както по другому надо звать? 

... на другие вопросы, надеюсь ответить поиском.....

Это сообщение отредактировал(а) Ракша - 24.2.2007, 14:16
PM MAIL ICQ   Вверх
hamsterKSU
Дата 24.2.2007, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



есть двумерные массивы, так же как и в сях 
Код

menuAction = new String[8][8];

и начни книгу читать с начала с типов, синтаксиса и т.п. а не с того места где кусок кода нашел и надпись работает

PM MAIL ICQ   Вверх
Ракша
Дата 25.2.2007, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



hamsterKSU, Тык я её с начала и начал читать...., а пра двумерные массивы там ничего сказано не было. И классы через импорт они загружают без знака * а прописывают каждый........ хотя конечно так и надо.... но.... Спасибо.
PM MAIL ICQ   Вверх
javastic
Дата 25.2.2007, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1214
Регистрация: 18.3.2005
Где: St.Petersburg

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



Ракша, 
Цитата

.... если один топик - один вопрос, то этаж скоко топиков надо?


Вот для этого сначала пользуемся поиском, а потом задаём вопрос.

Понимаешь, если в одном топике задавать сразу несколько вопросов, то движек форума при поиске будет создавать ненужную кучу найденых сообщений. А чтобы ты и потом другие смогли найти быстро и нормально ответы на свои вопросы мы просим чтобы был один топик - один вопрос. Правила не обсуждаются.


 ! 
javastic
Пожалуйста, соблюдай правила.



--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
hamsterKSU
Дата 25.2.2007, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



насчет книги - наверное ты не стой книги начал учить. если что не получается то можнол воспользоватся гуглом в твоем варианте - "массивы Java" набираешь и получаешь ссылки
а насчет твоих вопросов Ракша не спеши их на форуме задавать покапай чуть-чуть сам. 
PM MAIL ICQ   Вверх
Dancer
Дата 26.2.2007, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(hamsterKSU @  25.2.2007,  17:32 Найти цитируемый пост)
насчет книги - наверное ты не стой книги начал учить. если что не получается то можнол воспользоватся гуглом в твоем варианте - "массивы Java" набираешь и получаешь ссылки
а насчет твоих вопросов Ракша не спеши их на форуме задавать покапай чуть-чуть сам. 

Дык, конечно не с той smile, он там что-то про Буткевича писал, о программировании J2ME приложений. так эта книжка подразумевает, что человек хотябы о синтаксисе Java представление имеет, и даёт лишь описание того, что и как нужно делать для мобильных устройств, в чём специфика и и т.д. Но я не думаю, что там даётся что-то о самом языке Java. smile

Ракша, вам, молодой человек не Буткевича, вам Эккеля, Ноутен&Шилдт, и иже с ними сначала нужно бы почитать. (Хотя бы ознакомиться)


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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