JavaME

Статус: Offline
Реєстрація: 26.09.2008
Повідом.: 101
Всем доброго времени суток. Подскажите как добиться работы реакции на клавиатуру.
Вот код но он не реагирует:

HTML:
package newpackage;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.midlet.MIDlet;

public class MainClassKeyAct extends MIDlet implements CommandListener{

    private Command exitMidlet = new Command("Выход", Command.EXIT, 0);

    public void startApp() {
        Draw dr = new Draw();
        dr.start();
        dr.addCommand(exitMidlet);
        dr.setCommandListener(this);
        Display.getDisplay(this).setCurrent(dr);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void commandAction(Command c, Displayable d) {
        if (c == exitMidlet){
            destroyApp(false);
            notifyDestroyed();
        }
    }
}
код класса Draw

HTML:
package newpackage;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;

public class Draw extends Canvas implements Runnable{

    int positionX = getWidth()/2;
    int positionY = getHeight()/2;

    public Draw(){
        super();
    }

    public void start(){
        Thread t = new Thread(this);
        t.start();
    }

    protected void paint(Graphics g) {
        int x = g.getClipWidth();
        int y = g.getClipHeight();
        g.setColor(0xffffff);
        g.fillRect(0, 0, x, y);
        g.setColor(0, 0, 200);
        g.fillRect(positionX, positionY, 20, 20);
    }

    public void run() {
        while(true){
            repaint();
            try{
                Thread.sleep(20);
            }catch(InterruptedException e){
            }
        }
    }

    protected void keyPressed(int keyCode){
        int speed = 3;
        int act = getGameAction(keyCode);
        switch(act){
            case Canvas.LEFT:
                positionX -= speed;
                break;
            case Canvas.RIGHT:
                positionX += speed;
                break;
            case Canvas.UP:
                positionY -= speed;
                break;
            case Canvas.DOWN:
                positionY += speed;
                break;
            default:
                break;
        }
    }
}
 
Почитал бы ты книжку Хострмана "core java2 том 1" в глоссарии раздел приемы отладки
System.out.println в помощь =)
javaME никогда в глаза не видел но не вижу нигде в коде addKeyListener
 
Почитал бы ты книжку Хострмана "core java2 том 1" в глоссарии раздел приемы отладки
System.out.println в помощь =)
javaME никогда в глаза не видел но не вижу нигде в коде addKeyListener

Как я понимаю на JavaME немного по другому реализован слушатель клавиатуры телефона и addKeyListener просто нет. В ME события по обработке нажатия клавиш обрабатывает класс Canvas и несколько методов, одним из которых является keyPressed
 
Останнє редагування:
в любом случае принтЛН в помощь, а там уже консоль читай, входит ли вообще программа в нужный участок кода
 
В любом случае спс за помощь
 
в нетбинсах можно отлично отлагивать j2me приложения, поставь mobility плагин
 
Плагин стоит и ошибок нет но прога не пашет :(

поставить брейкпоинт?
оно хоть рисует? перерисовывает?

ЗЫ перерисовка в цикле - не самый правильный вариант использования ресурсов
 
Переписал код заново и он заработал.
 
может, надо было просто перекомпилить?
 
перерисовка в цикле - не самый правильный вариант использования ресурсов

Честно говоря, я не знаю других подходов для игр и приложений с динамичной графикой, где постоянно требуется обновление изображения.

Тем более, sleep(20) в обработчике потока честно стоит.
 
может, надо было просто перекомпилить?

Дорогой ,Влад, неужели можно так холодно говорить ,являясь свидетелем такого дурного отображения боломути.
Как хорошо,что все это не видит старейшина Михалыч.
 
Назад
Зверху Знизу