Траверс в пользовательском интерфейсе в j2me - PullRequest
0 голосов
/ 03 декабря 2011

Вот мой код метода Traverse

protected boolean traverse(int dir, int viewportWidth, int viewportHeight,
        int[] visRect_inout) {
    try {
        if (hori && vert) {
            // CustomItems items=new CustomItems("Hi");
            switch (dir) {
                case Canvas.DOWN:
                    this.a=dir;                  //Canvas.DOWN
                    this.b=viewportWidth;        //b=2
                    this.c=viewportHeight;       //c=3 
                    this.d=visRect_inout;        //d={2,2,250,250}
                    this.traverse(Canvas.UP, b, c, d);

                    break;
                case Canvas.UP:
                    this.a=dir;
                    this.j=viewportWidth;
                    this.k=viewportHeight;
                    this.d=visRect_inout;  
                    this.traverse(Canvas.UP, j, k, d);
                    break;
                case Canvas.LEFT:
                    this.a=dir;
                    this.j=viewportWidth;
                    this.k=viewportHeight;
                    this.d=visRect_inout;
                    this.traverse(Canvas.LEFT, j, k, d);
                    break;
                case Canvas.RIGHT:

                    break;
            }
        }

    } catch (Exception e) {
        System.out.println("Exception " + e);
    }
    return false;
}

Я очень плохо знаком с пользовательским элементом.
Если я сделал что-то не так, дайте мне знать.

1 Ответ

0 голосов
/ 08 декабря 2011

То, как вы вызываете traverse изнутри оператора switch, мне кажется скользким:

                    this.traverse(Canvas.UP, b, c, d); // ...
                    // ...and similar in cases Canvas.UP, LEFT

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

В вашем конкретном случае это может быть безопасно, хотя вы безоговорочно возвращаете false из вашего метода.Насколько я понимаю, это означает, что устройство никогда не будет пытаться вызвать перемещение с Canvas UP и другими потенциально опасными значениями.Не стесняйтесь проверять lcdui CustomItem # traverse API документацию для получения дополнительной информации, если вам интересно.

  • Учитывая ваш код, я думаю, что для вас имеет смысл изучить вводные примеры кодав учебниках.Есть много доступных в Интернете - поиск в Интернете что-то вроде "MIDP учебник CustomItem".Вот ссылка на один из них, например: Добавление пользовательских элементов в формы MIDP 2.0

    Кроме того, если вы используете Wireless Toolkit / Java ME SDK, вы можете проверить их примеры кода.Насколько я помню, там были хорошие рабочие примеры кода CustomItem.
...