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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите перенести программу с Java SE на ME 
V
    Опции темы
bncom
Дата 20.9.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



День добрый!

Начал изучать Java недавно, а тут уже дали задание сделать программу на ME, реализующую принципы ООП.

Сделал программу на Java SE (точнее, позаимствовал пример из книги Хорстманна, но сути не меняет, главное, что разобрался во всем):

Код

import java.util.*;

public class JavaTest
{
    public static void main(String[] args)
    {
        //Создаем объект Manager
        Manager boss = new Manager("Карл Петрович", 40000, 1987, 12, 15);
        boss.setBonus(5000); //Устанавливаем размер премии для менеджера

        Employee[] staff = new Employee[3];

        //Заполнение массива staff объектами Manager и Employee
        staff[0] = boss;
        staff[1] = new Employee("Ван Ваныч", 27750, 1989, 10, 1);
        staff[2] = new Employee("Марь Ванна", 23500, 1990, 3, 15);

        //Вывод информации (зарплаты) обо всех объектах (сотрудниках) Employee
        System.out.println("Ниже представлена зарплата для трех сотрудников компании \"Штингерльтон и Ко\" ");
        for (Employee e : staff)
            // e.getSalary - пример принципа полиморфизма
            System.out.println("Имя: " + e.getName() + ", зарплата: " +e.getSalary() + " рублей");
    }
}

/* Создадим суперкласс (он же родительский)
 */
class Employee
{
    public Employee(String n, double s, int year, int month, int day)
    {
        name = n;
        salary = s;
        GregorianCalendar calendar = new GregorianCalendar(year, month -1, day);
        hireDay = calendar.getTime();
    }

    public String getName()
    {
        return name;
    }

    public double getSalary()
    {
        return salary;
    }

    public Date getHireDay()
    {
        return hireDay;
    }

    public void raiseSalary(double byPercent)
    {
        double raise = salary * byPercent / 100;
        salary += raise;
    }

    private String name;
    private double salary;
    private Date hireDay;
}

/*
* Пораждаем класс Manager из класс Employee (принцип наследования)
* Менеджер - тоже сотрудник, но хороший, а хороший сотрдник должен получать премию.
*/
class Manager extends Employee
{
    //Создадим конструктор класса
    public Manager(String n, double s, int year, int month, int day)
    {
        super(n, s, year, month, day);
        bonus = 0;
    }

    //Переопределим метод getSalary, присутствующий в суперклассе Employee
    public double getSalary()
    {
        double baseSalary = super.getSalary();
        return baseSalary + bonus;
    }

    public void setBonus(double b)
    {
        bonus = b;
    }

    private double bonus;
}


Теперь нужно написать эту программу в ME.

Есть стандартный шаблон (который Хеллоу Ворд выводит), но как отталкиваться дальше, я не знаю.

Код

/*************************************/
package hello;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
/*************************************/

public class HelloMIDlet extends MIDlet implements CommandListener {

    //Команда выхода из программы
    private Command exitCommand = new Command("Выход", Command.EXIT, 0);
    //Дисплей телефона
    private Display display;

    public HelloMIDlet() {
        display = Display.getDisplay(this);
    }

    //Входная точка приложения
    public void startApp() {
        TextBox t = new TextBox("Lab #1", "Hello, World!", 256, 0);



        //Добавляем команду выхода
        t.addCommand(exitCommand);
        //Устанавливаем обработчик событий для команды выхода
        t.setCommandListener(this);
        //Отражаем текущий экран телефона
        display.setCurrent(t);
    }

    //Пауза в работе приложения
    public void pauseApp() {}
    //Выход из программы
    public void destroyApp(boolean unconditional) {}
    //Обработчик собтий для команд приложения
    public void commandAction(Command c, Displayable s) 
    {
        //Обработка команды выход
        if (c == exitCommand) {
            //Освобождение ресурсов и выгрузка из памяти модлета
            destroyApp(false);
            notifyDestroyed();
        } 
    }

}


Буду благодарен, если поможете оформить программу в стандартах ME, чтобы уже дальше я мог тоже посмотреть, как это делается.

Это сообщение отредактировал(а) bncom - 20.9.2009, 16:40
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
Galaran
Дата 20.9.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Язык тот же. Только библиотека другая
Т.е. тут только System.out.print() и GregorianCalendar, Date заменить на ME аналоги
PM MAIL   Вверх
bncom
Дата 20.9.2009, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Мне бы поподробнее, на примере. С ME я вообще не знаком (хоть и это и один язык, однако все же немного тут по-другому).
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
W0LF
Дата 21.9.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


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

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



wtk/apps
там есть куча примеров


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


Опытный
**


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

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



bncom,  ты же сам написал, что тебе дали задание, чтобы ты лучше разобрался, то есть самостоятельно, если я правильно понимаю smile.
Вот и разбирайся.
Тебя тут уже все, кто как смог - направили.
Дай и мне, мои 2 цента в копилку бросить smile.

1) Поставивь WTK от SUN, и смотри javadocs которые там идут, по началу тебе нужно будет MIDP API. 
javax.microedition.*

2) Фишки, которые юзаются в 1.5/1.6 в ME не прокатят, так что "Employee : e" забываем smile
for(int i = 0; i < staff.length; i++) {} // что-то вроде этого

3) Шаблон мидлета у тебя есть, там есть Display на который ты и выводишь свои элементы типа TextBox (TextBox t = new TextBox("Lab #1", "Hello, World!", 256, 0);)
Значит, тебе нужно организовать код, который будет выводить что-то на экран мобилки, а не в кносоль, как ты делал в SE (System.out.prinln(....))
Ну и выводи smile, создаёшь свой элемент, пусть будет форма. Эту форму нужно будет заполнить. То есть накидать на неё элементов:
Элементы могут быть StringItem, TextField, собственно писанные.....
Form form = new Form("Title");
for(int i = 0; i < staff.length; i++) {
    form.append(new StringItem("Name: ", staff[i].getName() + " rub", Item.PLAIN);
    form.append(new StringItem("Name: ", staff[i].getSalary() + " rub", Item.PLAIN);
}
.... 
display.setCurrent(form);

4) Остальные классы у тебя есть, так что вперёд - дерзай! smile


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


Бывалый
*


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

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



Ок, сейчас буду попробую реализовать.
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
bncom
Дата 21.9.2009, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Дерзанул, возникло пару вопросов.

Во-первых, я решил свои три класса разместить в трех файлах. Так, по-идеи, правильнее и понятнее выглядит.

Во-вторых, почему-то при создании дочернего класса, наследующего свойства суперкласс, у меня вылезает Warning.

Код

class Manager extends Employee {}

Warning: Exporting non-public type through public API

В-третьих, 

Код

form.append(new StringItem("Name: ", staff[i].getName() + " rub", Item.PLAIN);
form.append(new StringItem("Name: ", staff[i].getSalary() + " rub", Item.PLAIN);

у меня лично вызывает ошибку, спасает только более тривиальный подход:

Код

StringItem s1 = new StringItem("Имя: ", staff[i].getName() + " руб.", Item.PLAIN);
StringItem s2 = new StringItem("Имя: ", staff[i].getSalary() + " руб.", Item.PLAIN);


Однако почему-то строка StringItem hello = new StringItem... в куске кода:

Код

StringItem hello = new StringItem("Ниже представлена зарплата для трех сотрудников компании \"Штингерльтон и Ко\" ");
        for(int i = 0; i < staff.length; i++)
        {
            //e.getSalary - пример принципа полиморфизма
            StringItem s1 = new StringItem("Имя: ", staff[i].getName() + " руб.", Item.PLAIN);
            StringItem s2 = new StringItem("Имя: ", staff[i].getSalary() + " руб.", Item.PLAIN);
        }

Вызывает ошибку Cannot find symbol. Какой символ он найти не может, не пойму.

В четвертых, помогите разобраться с классом GregorianCalendar. Ему, как я понимаю, соответсвует в МЕ класс Calendar.

Прописал:

Код

import java.util.Calendar;
import java.util.Date;


Получил:

Код

public Employee(String n, double s, int year, int month, int day)
    {
        name = n;
        salary = s;
        Calendar calendar = new Calendar(year, month -1, day);
        hireDay = calendar.getTime();
    }


В итоге ошибка следующего характера:

Implement all abstract methods
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
eugine_s
Дата 21.9.2009, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(bncom @  21.9.2009,  16:21 Найти цитируемый пост)
Во-вторых


public class != class

Цитата(bncom @  21.9.2009,  16:21 Найти цитируемый пост)
В-третьих,


Телепаты в отпуске. Какая ошибка? 


Что-то я не вижу где используются StringItem-ы (s1, s2 - создаются, но не добавляются на форму).

Кажется так: 
Calendar calendar = Calendar.getInstance();
PM MAIL   Вверх
bncom
Дата 21.9.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(eugine_s @  21.9.2009,  16:50 Найти цитируемый пост)
public class != class
Это еще что значит? Публичный класс не класс ))

class Manager extends Employee {} - так в книжке написано было.



Цитата(eugine_s @  21.9.2009,  16:50 Найти цитируемый пост)
Что-то я не вижу где используются StringItem-ы (s1, s2 - создаются, но не добавляются на форму).
Ммм... Ну я же сказал, что с ME еще не особо знаком, кажется надо так продолжить:

Код

myform.append(s1)


С календарем поподробнее, пожалуйста, а еще лучше показать на моем примере, как реализовать его в ME.
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
Dancer
Дата 21.9.2009, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



bncom, ну ты блин и лентяй!!!! smile
Код компилиться, запускать - не запускал, не где.
Код для MIDP 2.0, если нужно для 1.0, то там нету поддержки плавающей точки, то есть убрать придётся всякие double.

Не забудь, что в твоём мидлете прописан package - hello, то есть, исходники у тебя так же должны быть в папке hello.
Что-то вроде src/hello/*.java (HeloMIDlet.java, Employee.java, Manager.java)

Вот твои классы:
HelloMIDlet.java 
Код

package hello;

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

public class HelloMIDlet extends MIDlet implements CommandListener {

    //Команда выхода из программы
    private Command exitCommand = new Command("Exit", Command.EXIT, 0);
    //Дисплей телефона
    private Display display;
    private static Form mainForm = null;

    public HelloMIDlet() {
        display = Display.getDisplay(this);
    }

    private void init() {
        mainForm = new Form("Title: MIDlet");

        //Создаем объект Manager
        Manager boss = new Manager("Karl Petrovich", 40000, 1987, 12, 15);
        boss.setBonus(5000); //Устанавливаем размер премии для менеджера

        Employee[] staff = new Employee[3];

        //Заполнение массива staff объектами Manager и Employee
        staff[0] = boss;
        staff[1] = new Employee("Van Vanych", 27750, 1989, 10, 1);
        staff[2] = new Employee("Mariya Vanna", 23500, 1990, 3, 15);

        //Вывод информации (зарплаты) обо всех объектах (сотрудниках) Employee
        mainForm.append(new StringItem("Company \"Roga i Kopyta\": ", "3 emploees salary:", Item.PLAIN));
        for (int i=0; i < staff.length; i++) {
            StringItem s1 = new StringItem("Name: ", staff[i].getName(), Item.PLAIN);
            StringItem s2 = new StringItem("Salary: ", 
                                           Double.toString(staff[i].getSalary()) + " rub.", 
                                           Item.PLAIN);
            mainForm.append(s1);
            mainForm.append(s2);
        }

        //Добавляем команду выхода
        mainForm.addCommand(exitCommand);
        //Устанавливаем обработчик событий для команды выхода
        mainForm.setCommandListener(this);
    }

    //Входная точка приложения
    public void startApp() {
        if(mainForm == null) {
            init();
        }
        display.setCurrent(mainForm);
    }

    //Пауза в работе приложения
    public void pauseApp() {}

    //Выход из программы
    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }

    //Обработчик собтий для команд приложения
    public void commandAction(Command c, Displayable s) 
    {
        //Обработка команды выход
        if (c == exitCommand) {
            //Освобождение ресурсов и выгрузка из памяти модлета
            destroyApp(true);
        } 
    }

}


Employee.java
Код

package hello;

import java.util.*;

/* Создадим суперкласс (он же родительский)
 */
class Employee
{
    public Employee(String n, double s, int year, int month, int day)
    {
        name = n;
        salary = s;
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, month -1);
        calendar.set(Calendar.DATE, day);
        hireDay = calendar.getTime();
    }

    public String getName()
    {
        return name;
    }

    public double getSalary()
    {
        return salary;
    }

    public Date getHireDay()
    {
        return hireDay;
    }

    public void raiseSalary(double byPercent)
    {
        double raise = salary * byPercent / 100;
        salary += raise;
    }

    private String name;
    private double salary;
    private Date hireDay;
}


Manager.java 
Код

package hello;

/*
* Пораждаем класс Manager из класс Employee (принцип наследования)
* Менеджер - тоже сотрудник, но хороший, а хороший сотрдник должен получать премию.
*/
class Manager extends Employee
{
    //Создадим конструктор класса
    public Manager(String n, double s, int year, int month, int day)
    {
        super(n, s, year, month, day);
        bonus = 0;
    }

    //Переопределим метод getSalary, присутствующий в суперклассе Employee
    public double getSalary()
    {
        double baseSalary = super.getSalary();
        return baseSalary + bonus;
    }

    public void setBonus(double b)
    {
        bonus = b;
    }

    private double bonus;
}


Это сообщение отредактировал(а) Dancer - 21.9.2009, 18:35


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


Бывалый
*


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

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



Dancer, спасибо, помог.

В принципе, у меня уже и так все было сделано, единственное, с классом календаря не разобрался.


Код

    public void startApp() {
        if(mainForm == null) {
            init();
        }
        display.setCurrent(mainForm);
    }

Интересный подход, в книжке у меня такого вообще нет  smile 

Почему-то в профиле MIDP-2.1 запускаться программа не захотелась у меня, поменял на MIDP-2.0 - все заработало.

Сейчас буду пробывать прикрутить возможность ввода зарплаты, а потом их вывод с фамилиями.
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
susanin
Дата 21.9.2009, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Dancer @  21.9.2009,  18:33 Найти цитируемый пост)
bncom, ну ты блин и лентяй!!!! 

Вот это уж точно!! smile 
PM MAIL   Вверх
bncom
Дата 22.9.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



У меня наверно сейчас голова лопнет. Сижу уже какое время, пытаюсь реализовать переход с одного экрана на другой.

Экран #1: выводится TextField. Туда заносится процентная надбавка для зарплаты.
Экран #2: отображается на Form список служащих с увеличенной зарплатой.

Начал тут кумекать:

Код

public class MainTest extends MIDlet implements CommandListener
{
    //Команда выхода из программы
    private Command exitCommand = new Command("Выход", Command.EXIT, 0);
    //Команда ввода процентной надбавки к зарплате (Ok)
    private Command perexodMain = new Command("Ok", Command.SCREEN, 1);
    //Дисплей телефона
    private Display display;


Код

//Входная точка приложения
    private void init()
    {
        //Создаем объект класса Form
        myform = new Form("Лабораторная #1 - Принципы ООП");
        //Добавляем команду выхода из программы
        myform.addCommand(exitCommand);
        //Добавляем команду перехода в основной экран
        myform.addCommand(perexodMain);
        //Устанавливаем обработчик событий для команды команд объекта класса Form
        myform.setCommandListener(this);
        //Отображаем текущий экран телефона
        //display.setCurrent(myform);

        myform.append(new TextField("Введите надбавку:", "", 20, TextField.ANY));

Вот дальше я не понимаю, где мне располагать "Создаем объект Manager", цикл для вывода инфы о зарплате? 
Если я оставлю его в private void init() - то это скорее всего будет неправильно, т.к. на экране отобазится:

1. кнопка ВЫХОД
2. кнопка ПЕРЕХОД (она же ОК)
3. Текст "Введите надбавку"
4. Список служащих с зарплатой

А ведь надо список служищих в новом окне разместить, уже после ввода надбавки.

Иду в обработчки событий:

Код

public void commandAction(Command c, Displayable s)
    {
        //Обработка команды выход
        if (c == exitCommand)
        {
            //Освобождение ресурсов и выгрузка из памяти модлета
            destroyApp(true);
        }
        //Обработка команды ввода процентной надбавки к зарплате (Ok)
        if (c == perexodMain)
        {
           ....
        }

    }


Вот что надо в if (c == perexodMain) прописывать?
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
W0LF
Дата 22.9.2009, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


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

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



модлет - такого нет, есть мидлет.
по хорошему, нужно создавать несколько классов, наследоваться от Form, в них прописывать какую-то логику, а потом делать переход между ними. чтоб сделать переход, нужно делать в классе, наследуемом от мидлета статический метод который будет устанавливать дисплей. и я уже писал, что в wtk/apps есть примеры, насколько я помню.
Dancer не напишет Вам все Ваши лабораторные(хотя по себе в свое время помню что он оччень терпеливый =) ) и никто особо этим заниматься не будет... это время..
спишите лучше у однокурсников, переименовывая имена классов и интерфейс, если Вы не собираетесь заниматься в будущем этой профессией =)




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


Бывалый
*


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

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



Цитата(W0LF @  22.9.2009,  15:21 Найти цитируемый пост)
Dancer не напишет Вам все Ваши лабораторные
Да а я разве говорил, что надо писать за меня лабораторные?

Я понимаю, если бы пришел с пустыми руками, а попросил бы за меня написать. Вот это я понимаю был бы наглежь. А тут я просто прошу показать, КАК надо, т.к. в книжке про это хоть и на писано, но для меня лично не очень понятно. Ведь не зря же говорят, что один раз лучше показать, чем сто раз говорить...

Цитата(W0LF @  22.9.2009,  15:21 Найти цитируемый пост)
модлет - такого нет, есть мидлет.
Очачатался я очачатался =)


Цитата(W0LF @  22.9.2009,  15:21 Найти цитируемый пост)
что в wtk/apps есть примеры
wtk у меня не стоит, а установлено java Platform ME SDK.

APPS - это что такое?


Это сообщение отредактировал(а) bncom - 22.9.2009, 16:56
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
Dancer
Дата 22.9.2009, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Platform ME SDK и  WTK в данном случае одно и то же. Это сейчас у Sun  стало называться, платформ бла-бла-бла, а раньше это был просто Wireless Tool Kit (WTK)
Куда ты поставил это дело? Должна быть папка что-то Disk:/bla-bla-bla/WKT_ROOT, назовём её %WTK_HOME% (для удобства)
%WTK_HOME%/apps - там есть примеры приложений с исходниками, их там дохрена, смотри не хочу.
Кстати, я тебе советовал смотреть javadocs которые идут вместе с WTK, ты их нашёл?????
%WTK_HOME%\docs\api - документация
%WTK_HOME%\docs\api\midp-2.0\index.html - как только научишься пользоваться этими доками, так сразу отпадёт куча ненужных вопросов.
Ну уж а как до кода с примерами доберёшься, думаю их остаться должно будет ещё меньше.

у тебя есть display - это твоё окошко (для твоего приложение) в "реальный мир" smile
display.setCurrent(что-то, что наследовано от Displayable) то есть, Form, List, Canvas 
вот и пользуй это дело: display.setCurrent(myform);
когда произошло нажатие на кнопку, пришёл event ты это дело обработал, понимаешь что нужно другую формочку на экран пихнуть, вот и пихни display.setCurrent(myform);

Ну, а  W0LF,  тебе правильно написал, делай статический метод, для получения дисплея, и можешь это дело юзать в любом своём классе. Вызываться это будет так: HelloMIDlet.getDisplay().setCurretn(bla-bla-bla);
Код

public class HelloMIDlet extends MIDlet implements CommandListener {
.....
private static Display display;

public static Display getDisplay() {
    if(display == null) {
        display = Display.getDisplay(this);
    }
    return disp;
}
......
}


Тут похоже всётаки у тебя проблема не с ME, а с Java как с таковой. Ну а по поводу книжек - на русском по ME хороших не видел, но зато ты можешь здесь многому понабраться, как в FAQ, так и в постах, которые уже не поразу написаны. Читай, пробуй.


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


Опытный
**


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

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



Цитата(Dancer @  22.9.2009,  17:26 Найти цитируемый пост)
Ну а по поводу книжек - на русском по ME хороших не видел

для такого уровня книжек полно. взять к примеру Е.Л. Буткевич - Пишем программы и игры для сотовых телефонов
PM MAIL   Вверх
Dancer
Дата 22.9.2009, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(susanin @  22.9.2009,  18:50 Найти цитируемый пост)
для такого уровня книжек полно. взять к примеру Е.Л. Буткевич - Пишем программы и игры для сотовых телефонов

В книжках такого уровня ошибок было столько....., что мама не горюй, по ним лучше не учиться, либо не сможешь, либо плохому научат (хотя, может быть в последних изданиях всё стало лучше), то что видел - откровенные "какакшки" были.
Да и по правде говоря, кроме javadocs который с WTK идёт, по большому счёту больше ничего и не нужно. (по себе помню)

всё имхо, конечно smile


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


Опытный
**


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

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



Цитата(Dancer @  22.9.2009,  19:29 Найти цитируемый пост)
Да и по правде говоря, кроме javadocs который с WTK идёт, по большому счёту больше ничего и не нужно. (по себе помню)

сори за офтоп smile 
а вы не скажете как явадоки из se добавить в me? потому что если пишешь на me, то явадоков на функции из se не видно...что уж только не пробовал...скачивал архивы с сайта с документацией..добавлял их к стандартным явадокам...все равно не видно
PM MAIL   Вверх
Dancer
Дата 23.9.2009, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну, вообще то, ME доки в себе всё что нужно имеют и только эти методы можно будет использовать из java.lang java.io и т.д. (имею ввиду исползьовать в ME коде)
С SE вообще не стоит это дело как-то пытаться пересекать. Я если честно не понял для чего это нужно. 
Если хочется видеть и то и то, ну в браузере делаешь закладки на нужные index.html и пользуешь smile. Когда нужно SE открываешь одну закладку, нужно ME - другую. причём для ME сделано не очень скажем так хорошо, разные API в разных папках лежат, поэтому либо самому заходить в папку с доками выбирать папку с API и уже оттуда пускать index.html либо сделать закладки в браузере на всё что нужно (в общем, почему бы и нет)
Можно конечно пойти ещё одним "хитрожопым" путём и вбабахать линки на java.microedition.* в html файлы, которые идут с SE.
Но пожинить это дело просто так не получитсья (хотя, как я уже ранее писал, необходимости не вижу)

Если бы были исходники классов ME с /** */ то можно было бы это дело подложить в паку вместе с src SE, пробежаться по всему этому делу javadoc командой и получить новые доки, куда эти пакеты уже будут включены. 



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


alexander lonsky
***


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

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



здается мне, что имелось ввиду подключение джавадока в IDE, так иногда быстрее, туда же обычно и исходники фреймворков лепят, чтоб можно было и исходники смотреть. смотря какая IDE, в Intellij Idea, например, просто в настройках проекта можно было подсунуть или javadoc или sources, и все.


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


Опытный
**


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

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



Цитата(W0LF @  23.9.2009,  11:02 Найти цитируемый пост)
здается мне, что имелось ввиду подключение джавадока в IDE

именно!
например хочу я создать в me приложении объект класса Formatter
Formatter f = new Formatter();
но явадока на этот класс в me нет...только в se...не создавать же проект se только для того чтобы посмотреть инфу на этот класс...
PM MAIL   Вверх
Dancer
Дата 23.9.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ЭЭЭЭЭ
как бы сказать то...... 
Я конечно дурак, но не на столько.
Если мы будем использовать класс Formatter в своём ME приложении, то компиляция то пройдёт, этого добиться можно, в этом я не сомневаюсь, но как потом будет проходить преверификация??? Она же не пройдёт. И уж тем более, даже если сможем обмануть преверифайер, ну или создать JAR обойдя preverify и зальём в телефон и запустим это дело, на телефоне это упадёт!!!!!
Так как нет поддержки данного класса производителем, потому что этот класс не входит в набор API.

То нахрена нам его пользовать, если на реальном аппарате это никто не поддерживает????

Тут либо пишем свой Formatter (в своём проекте, своего приложения) и его пользуем, на что IDE впринципе нормально реагирует и покажет и методы этого класса и т.д., если ещё и коментарии в нём в стиле javadoc то и все остальные прелести "прогресса" будут то же.

Ну или как W0LF писал, можно это дело поженить в IntelliJ, в NetBeans тоже можно такое сделать. Сказать какие либы пользуются в проекте, где лежать src, где javadocs. Это уже всё зависит от пользуемого IDE, сейчас они сильно продвинутые стали, так что полазий в настройках smile. Но вот реального применения, я чего-то пока не увидел/не понял (для ЧЕГО????)


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


Опытный
**


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

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



Цитата(Dancer @  23.9.2009,  16:52 Найти цитируемый пост)
я чего-то пока не увидел/не понял (для ЧЕГО????)

ну вообще хотел сделать форматированный ввод в textfield...думал для этого попробовать какие то средства из se...но там похоже таких тоже нет...

Цитата(Dancer @  23.9.2009,  16:52 Найти цитируемый пост)
Так как нет поддержки данного класса производителем, потому что этот класс не входит в набор API.

т.е. если я правильно понял в sdk для me есть классы и соответственно явадоки к ним только те, которые поддерживаются телефоном, и другие (кроме самописных) классы использовать не вариант?
PM MAIL   Вверх
Dancer
Дата 23.9.2009, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(susanin @  23.9.2009,  17:10 Найти цитируемый пост)
т.е. если я правильно понял в sdk для me есть классы и соответственно явадоки к ним только те, которые поддерживаются телефоном, и другие (кроме самописных) классы использовать не вариант?

УГУ, 99,9% true smile

только не в SDK, скажем так, а в Sun спецификациях, которые называются JSR (слышал навреное?), так вот, именно эту спецификацию производители аппаратов должны поддерживать, то есть в телефоне будут доступны именно те классы и методы, которые представленны в той или спецификации. Ну и производитель соответственно презентует, какие JSR он поддержал.
Так же, производитель может сделать поддержку собсвенных классов, которые могут быть доступны пользователю, а могут быть и не доступны, но эти классы никак не будут проходить под каким либо JSR.
Вот например, говориться что мобилка поддерживает JSR-75 - это говорит о том, что мидлеты могут ползовать классы для обращения к PhoneBook, базе Events (календарь в мобиле с ремайндерами), и иметь доступ к файловой системе. То есть в своём мидлете можно будет пользовать javax.microedition.pim.* методы и быть уверенным, что аппараты которые поддерживают данный JSR имеют одинаковый интерефейс, и будут работать в принципе одинаково с одним и тем же кодом ;).
MIDP2.0 - JSR-118
CLDC-1.0 - JSR-37
MultiMedia - JSR-135
Bluetooth - JSR-92
SMS/MMS - JSR-120/JSR-205
и т.д.

На эту тему тут уже не поразу было писано, пошукай конфу.
У нас "песочница" очень сильно ограничена, и плюс ко всему, то что ты сможешь пускануть на компе под эмулятором, не факт что один в одни будет работать/отображатсья на конечном устройстве.
Сам посчитай сколько сопряжений интерфейсов проходит. smile



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


Опытный
**


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

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



Dancer, большое спасибо за разъяснения! плюсую! smile теперь много для себя пояснил!
PM MAIL   Вверх
W0LF
Дата 23.9.2009, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


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

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



 smile 
там на шапке темы есть кнопочка со смайликом - "пометить как решенный", ее желательно плиз тыцать, когда вопрос разрешился.

Это сообщение отредактировал(а) W0LF - 23.9.2009, 19:40


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


Бывалый
*


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

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



Решил подключить к НетБинсу плагин поддержки J2ME. Скачал. установил, все как положено. Затем НетБинс нашел на компе у меня SDK Me, импортировал то, что ему нужно было (точнее, я как понял, он просто у себя порописал пути до моего установленного SDK Me и все).

Создюа новый проект, пакет с классами, вставляю туда код из моего проекта, который был написан в Java Platform ME SDK. Как бы все красиво и ладненько. Запускаю на исполнение, бла-бла... и тут ошибка выскакивает:

Updating application descriptor: C:\Users\admin\Documents\NetBeansProjects\Lab1\dist\Lab1.jad
Application descriptor does not declare any MIDlet. Direct execution is not allowed.
Generated "C:\Users\admin\Documents\NetBeansProjects\Lab1\dist\Lab1.jar" is 3868 bytes.

Эмулятор запускается, но программу не запускает.

Вопрос: из-за чего это?

--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
eugine_s
Дата 25.9.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(bncom @  25.9.2009,  13:19 Найти цитируемый пост)
Вопрос: из-за чего это?


Скорее всего в свойствах проекта не прописал класс мидлета. 

Для проверки можешь глянуть вот сюда: 
C:\Users\admin\Documents\NetBeansProjects\Lab1\dist\Lab1.jad

и найти в нем строку MIDlet-1: 

В ней должно быть MIDlet-1: Midlet-Name, Midlet-Icon, Midlet-MainClass (Midlet-Icon может быть пустым)
PM MAIL   Вверх
bncom
Дата 25.9.2009, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(eugine_s @  25.9.2009,  14:53 Найти цитируемый пост)
Скорее всего в свойствах проекта не прописал класс мидлета. 
Так точно, было не прописано.

Спс за помощь.

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

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

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


 




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


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

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