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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выход из приложения в Canvas 
:(
    Опции темы
satellite1977
Дата 20.8.2007, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет всем. Как сделать выход из приложения в Canvas? Пытаюсь создать объект главного класса мидлета и использовать его метод destroyApp(), но выскакивает ошибка SecurityExeption - вроде и правильно, так как объект мидлета уже создан а я пытаюсь создать еще один. Тогда как же поступить? Спасибо за внимание )))

class Graf extends Canvas implements CommandListener
{
    public Command CExit;
    public Graf()
        {
            super();
            CExit = new Command("Выход", Command.EXIT, 1);
         }
public void paint(Graphics g)
{
    addCommand(CExit);
    setCommandListener(this);
}
public void commandAction(Command c, Displayable d)
{
    if (c == CExit)
        {
             ????
         }
}

PM MAIL   Вверх
SatanClaus
Дата 20.8.2007, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



У тебя должен быть примерно такой мидлет
Код

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

/**
 * Created by IntelliJ IDEA.
 * User: SatanClaus
 * Date: 20.08.2007
 * Time: 10:35:24
 * To change this template use File | Settings | File Templates.
 */
public class Main extends MIDlet {

    private static Main instance;
    private Graf canvas;

    public static Main getInstance(){
        if (instance == null) instance = new Main();
        return instance;
    }

    public void startApp(){
        instance = this;
        canvas = new Graf();
        Display.getDisplay(this).setCurrent(canvas);
    }
    public void pauseApp(){

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

Потом в обработке нажатия клавиши, в канвасе,
пишешь Main.getInstance().destroyApp(true); И все... Только в destroyApp(boolean destroy)
ты должен закрывать все потоки и все такое... А потом вызывать notifyDestroyed();
PM MAIL   Вверх
hamsterKSU
Дата 20.8.2007, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а о таких вещах как статические переменные или методы слыхал?
в классе мидлета делаешь статическую переменную на него самого и потом обращаешся к ней и вызываешь destroyApp()

Добавлено через 22 секунды
опередили smile
PM MAIL ICQ   Вверх
SatanClaus
Дата 20.8.2007, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 smile 
PM MAIL   Вверх
satellite1977
Дата 20.8.2007, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо большое. Когда-то я очень хорошо владел Бейсиком (во времена ZX SPECTRUM )))), сейчас пытаюсь овладеть ООП, дается нелегко, потому что привык к простому коду без всяких классов))).
Может у кого-то своими вопросами вызываю гнев, но вы уж извините )))

Отдельное спасибо SatanClaus, за то, что привел такой понятный ответ с примером.


Это сообщение отредактировал(а) satellite1977 - 20.8.2007, 11:36
PM MAIL   Вверх
W0LF
Дата 20.8.2007, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


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

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



c WTK идет набор примеров
...:\WTK22\apps\
там нормально много чего описано


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


Эксперт
****


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

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



Если сделать как было предложено и во время игры был звонок то после ответа на звонок и возврата к игре будет создан новый Canvas и игра начнётся сначала (хотя конечно смотря как он написан). Лучше Canvas создать в конструкторе, а startApp() только показывать. Указатель на Midlet можно передать в конструкторе Canvas, тогда его можно использовать в нескольких мидлетах:
Код

public class MyMidlet extends Midlet {
   MyCanvas canvas;
   public MyMidlet() {
      canvas = new MyCanvas(this);
   }
   public void startApp() {
      Display.getDisplay(this).setCurrent(canvas);
   }
}
public class MyCanvas extends Canvas implements CommandListener {
   private Command exit = new Command("Exit", Command.Exit, 1);
   private Midlet midlet;
   public MyCanvas(Midlet midlet) {
      this.midlet = midlet;
      addCommand(exit);
      setCommandListener(this);
   }
   public void commandAction(Command c, Displayable d) {
     if (c == exit) {
       midlet.destroyApp(true);
       midlet.notifyDestroyed();
       return;
     }
     ...
   }
   ...
}

Или можно перенести обработку exit в мидлет:
Код

public class MyMidlet extends Midlet implements CommandListener {
   private Command exit = new Command("Exit", Command.Exit, 1);
   private static Midlet midlet;
   MyCanvas canvas;
   public MyMidlet() {
      midlet = this;
      canvas = new MyCanvas(this);
      canvas.addCommand(exit);
      canvas.setCommandListener(this);
   }
   public void startApp() {
      Display.getDisplay(this).setCurrent(canvas);
   }
   public void commandAction(Command c, Displayable d) {
     if (c == exit) {
       destroyApp(true);
       notifyDestroyed();
       midlet = null;
     } else
       canvas.commandAction(c, d);
   }
}
public class MyCanvas extends Canvas implements CommandListener {
   public MyCanvas() {
   }
   public void commandAction(Command c, Displayable d) {
     ...
   }
   ...
}


PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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