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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не запускается приложение. Но и ошибок нет. Пример из книги! 
V
    Опции темы
Цербер
Дата 21.7.2009, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всем доброе время суток!
Читаю книгу Буткевича, примеры приведены но код не всегда подробен, например какие классы импортировать и остальное по мелочам.
И на одном примере ступор. Простая змейка, просто передвижение.
но приложение не запускается.
Надеюсь поможете разобраться!
Вот код:
Код

package snake;

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

public class Enter extends MIDlet {
    private Display display;
    public void startApp() {
        Snake snake = new Snake();
        display = Display.getDisplay(this);
        display.setCurrent(snake);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }
}


package snake;


import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Graphics;
import java.io.*;
import java.util.Vector;

public class Snake extends Canvas {
    private int HEAD = 0;
    private int TAIL = 1;
    private int BODY = 2;
    private int ACLOCKWISE_TURN = 3;
    private int CLOCKWISE_TURN = 4;
    private int UP = 0;
    private int LEFT = 1;
    private int RIGHT = 2;
    private int DOWN = 3;
    private int  direction;
    private Vector snake;
    private int width;
    private int height;
    private int xHead;
    private int yHead;
    private Image[] images;
    private int imageSize;
    private boolean gameOverFlag;
    
    public Snake () {
        super();
        images = new Image[20];
        try {
            // голова во всех направлениях
            images[0] = Image.createImage("/headUp.png");
            images[1] = Image.createImage("/headLeft.png");
            images[2] = Image.createImage("/headRight.png");
            images[3] = Image.createImage("/headDown.png");
            // хвост во всех напрвлениях
            images[4] = Image.createImage("/tailUp.png");
            images[5] = Image.createImage("/tailLeft.png");
            images[6] = Image.createImage("/tailRight.png");
            images[7] = Image.createImage("/tailDown.png");
            // тело
            images[8] = Image.createImage("/bodyUp.png");
            images[9] = Image.createImage("/bodyLeft.png");
            images[10] = images[8];
            images[11] = images[9];
            // сгиб тела против часовой стрелке
            images[12] = Image.createImage("/turnDownLeft.png");
            images[13] = Image.createImage("/turnUpLeft.png");
            images[14] = Image.createImage("/turnDownRight.png");
            images[15] = Image.createImage("/turnUpRight.png");
            // сгиб по часовой стрелке
            images[16] = images[14];
            images[17] = images[12];
            images[18] = images[15];
            images[19] = images[13];
        }
        catch(IOException ioe) {}
            imageSize = images[0].getWidth();
            snake = new Vector();
            width = getWidth();
            height = getHeight();
            xHead = ((width/2)/imageSize)*imageSize;
            yHead = ((height/2)/imageSize)*imageSize;
            SnakePart partS = new SnakePart(xHead, yHead, HEAD, UP);
            snake.addElement(partS);
            partS = new SnakePart(xHead, yHead+2*imageSize, TAIL, UP);
            snake.addElement(partS);
            direction = UP;
            gameOverFlag = false;
    }

    public void paint (Graphics g) {
        g.setColor(0xFFFFFFF);
        g.fillRect(0,0,width,height);
        g.setColor(0x000000);
        g.drawRect(1,1,width-3, height-3);
        int snakeLen = snake.size();
        if(gameOverFlag) {
            g.drawString("Game Over", width/2, height/2-10, g.HCENTER|g.TOP);
            String score = new String ("YOUR CODE: "+snakeLen);
            g.drawString(score, width/2, height/2+10, g.HCENTER|g.TOP);
            return;
        }
        else {
            for(int i=0; i<snakeLen; i++) {
                g.drawImage(
                        images[4*((SnakePart)snake.elementAt(i)).getPart()+((SnakePart)snake.elementAt(i)).getDir()],
                        ((SnakePart)snake.elementAt(i)).getX(),
                        ((SnakePart)snake.elementAt(i)).getY(),
                        g.HCENTER|g.VCENTER);
            }
        }
    }

    public void keyPressed(int keyCode) {
        if(!gameOverFlag) {
            switch(keyCode) {
                case KEY_NUM2: 
                        checkMove(xHead, yHead-imageSize);
                        moveUp();
                break;
                case KEY_NUM4: 
                        checkMove(xHead-imageSize, yHead);
                        moveLeft();
                break;
                case KEY_NUM6: 
                        checkMove(xHead+imageSize, yHead);
                        moveRight();
                break;
                case KEY_NUM8: 
                        checkMove(xHead, yHead+imageSize);
                        moveDown();
                break;
            }
            repaint();
        }
    }

    public void checkMove(int xH, int yH) {
        for(int i = 3; i<snake.size() - 1; i++) {
            if(xH == ((SnakePart)(snake.elementAt(i))).getX() && yH==((SnakePart)(snake.elementAt(i))).getY())
            gameOverFlag = true;
        }
    }

    public void moveLeft() {
        if(direction != RIGHT) {
            xHead-=imageSize;
            if(xHead<4) {gameOverFlag = true; return;}
            SnakePart head = (SnakePart)(snake.firstElement());
            if(direction == UP) {
                head.setPartDir(ACLOCKWISE_TURN,LEFT);
            }
            else {
                if(direction == DOWN) {
                    head.setPartDir(CLOCKWISE_TURN,LEFT);
                }
                else {
                    head.setPartDir(BODY,LEFT);
                }
            }
            SnakePart sPart = new SnakePart(xHead,yHead,HEAD,LEFT);
            snake.insertElementAt(sPart,0);
            snake.removeElement(snake.lastElement());
            ((SnakePart)snake.lastElement()).setPartDir(TAIL, -1);
            direction = LEFT;

        }
    }

    public void moveUp() {
        if(direction != DOWN) {
            yHead-=imageSize;
            if(yHead<4) {gameOverFlag = true; return;}
            SnakePart head = (SnakePart)(snake.firstElement());
            if(direction == LEFT) {
                head.setPartDir(CLOCKWISE_TURN,UP);
            }
            else {
                if(direction == RIGHT) {
                    head.setPartDir(ACLOCKWISE_TURN,UP);
                }
                else {
                    head.setPartDir(BODY,UP);
                }
            }
            SnakePart sPart = new SnakePart(xHead,yHead,HEAD,UP);
            snake.insertElementAt(sPart,0);
            snake.removeElement(snake.lastElement());
            ((SnakePart)snake.lastElement()).setPartDir(TAIL, -1);
            direction = UP;

        }
    }

    public void moveDown() {
        if(direction != UP) {
            yHead+=imageSize;
            if(yHead>4) {gameOverFlag = true; return;}
            SnakePart head = (SnakePart)(snake.firstElement());
            if(direction == LEFT) {
                head.setPartDir(ACLOCKWISE_TURN,DOWN);
            }
            else {
                if(direction == RIGHT) {
                    head.setPartDir(CLOCKWISE_TURN,DOWN);
                }
                else {
                    head.setPartDir(BODY,UP);
                }
            }
            SnakePart sPart = new SnakePart(xHead,yHead,HEAD,DOWN);
            snake.insertElementAt(sPart,0);
            snake.removeElement(snake.lastElement());
            ((SnakePart)snake.lastElement()).setPartDir(TAIL, -1);
            direction = DOWN;

        }
    }

    public void moveRight() {
        if(direction != LEFT) {
            xHead+=imageSize;
            if(xHead>4) {gameOverFlag = true; return;}
            SnakePart head = (SnakePart)(snake.firstElement());
            if(direction == UP) {
                head.setPartDir(ACLOCKWISE_TURN,RIGHT);
            }
            else {
                if(direction == DOWN) {
                    head.setPartDir(CLOCKWISE_TURN,RIGHT);
                }
                else {
                    head.setPartDir(BODY,UP);
                }
            }
            SnakePart sPart = new SnakePart(xHead,yHead,HEAD,RIGHT);
            snake.insertElementAt(sPart,0);
            snake.removeElement(snake.lastElement());
            ((SnakePart)snake.lastElement()).setPartDir(TAIL, -1);
            direction = RIGHT;

        }
    }
}


package snake;

public class SnakePart extends Object {
    private int x;
    private int y;
    private int part;
    private int dir;
    
    public SnakePart(int _x, int _y, int _part, int _dir ) {
        x = _x;
        y = _y;
        part = _part;
        dir = _dir;
    }
    public int getPart() {return part;}
    public int getDir() {return dir;}
    public int getX() {return x;}
    public int getY() {return y;}
    public void setPartDir(int _part, int _dir ) {
        part = _part;
        if(_dir != 0) dir = _dir;

    }
}



Это сообщение отредактировал(а) Цербер - 21.7.2009, 14:37
PM MAIL ICQ   Вверх
Samuil
Дата 21.7.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

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



а что пишет логгер? Какие ошибки? Какую функцию не проходит. 


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
Цербер
Дата 21.7.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Когда запускаешь приложение - ошибок не выдаёт!
а вот когда переходишь к MIDlet-у выводит сообщение:
Код

null
startApp threw an Exception
java.lang.NullPointerException
java.lang.NullPointerException
        at snake.Snake.<init>(Snake.java:65)
        at snake.Enter.startApp(Enter.java:9)
        at javax.microedition.midlet.MIDletProxy.startApp(MIDletProxy.java:46)
        at com.sun.midp.midlet.Scheduler.schedule(+270)


где at snake.Snake.<init>(Snake.java:65) строка это:
Код

imageSize = images[0].getWidth();

а at snake.Enter.startApp(Enter.java:9) это:
Код

        Snake snake = new Snake();

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


Опытный
**


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

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



Вообще-то стоило просто протрассировать.

Похоже вот проблема:

Код

images = new Image[20];
 try {
// голова во всех направлениях
images[0] = Image.createImage("/headUp.png");
            ...
} catch(IOException ioe) {}
imageSize = images[0].getWidth();


Во первых - к чему пустой catch? Чтобы просто "заткнулся"?

И что в итоге произойдет, если строчка images[0] = Image.createImage("/headUp.png"); вызовет эксепшн?
А в images[0] останется null.
Который потом вызывается -  images[0].getWidth();

Итог действия 
null.getWidth();
и будет:

java.lang.NullPointerException


Это сообщение отредактировал(а) Skynin - 21.7.2009, 17:06
PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
Цербер
Дата 22.7.2009, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Skynin  Я просто ещё очень зелёный в JAVA, это мои первые шаги по Буткевичу, не пинайте сина.
Помогите разобраться, что нужно сделать?
catch по книге был пустой, я попробовал заполнить его 
Код

catch (IOException ioe) {
    System.out.println(ioe.getMessage());
}

но это не изменило работу приложения=(
а что нужно сделать? будет моя первая грабля в java =)
З.Ы. заранее пасиба
PM MAIL ICQ   Вверх
math64
Дата 22.7.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Нужно добавить в проект ресурсы с картинками - /headUp.png и т.д. Причём важен регистр букв (т.е. не должно быть например, /headUp.PNG)
PM   Вверх
Цербер
Дата 23.7.2009, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



math64 вот блин... не в ту директорию закинул images.
пасиба. буду внимательнее!

Это сообщение отредактировал(а) Цербер - 23.7.2009, 07:41
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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