Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > Помогите начинающему по J2ME


Автор: ted 14.8.2005, 11:44
Доброго времени суток! Всем привет!
Большая просьба помогите что нужно для начала программирования на J2me?Не скачивается ни одна ссылка из http://java.sun.com/products/sjwtoolkit/
Можно ли откуда нибудь еще скачать инструменты разработки?
С уважением Тед

Автор: batigoal 14.8.2005, 14:35
Заглядываем в FAQ smile
http://forum.vingrad.ru/index.php?act=module&module=vingradfaq&target=main_panel&article=131

Автор: WildChild 15.9.2005, 09:18
Lamer George, посмотрел ссылку в FAQe...
J2ME Wireless Toolkit 1.0.4_01 - это последняя версия J2ME????? smile
Или появились новые версии?
Будет ли J2ME Wireless Toolkit 1.0.4_01 работатьс с J2SE 5.0 (JDK 1.5)?
Спасибо!

Автор: WildChild 15.9.2005, 09:31
А вот это подойдет? J2ME™ Wireless Toolkit 2.2 FCS.
Или не по месту это будет...

Автор: Mihail ([email protected]) 29.11.2005, 20:49
как работать с файлами в "J2ME Wireless Toolkit 2.2".
строка:
bookSource_streamConnection = (StreamConnection)Connector.open("file:/BookSource.txt");

Всё компилирется нормально, но когда доходит до загрузки файла выдаёт:
"java.lang.IllegalArgumentException: Missing protocol separator"

Missing protocol separator - программа сократ переводит: "Потеря разделителя протокола" - как это понимать?

Автор: Stalnoj 29.11.2005, 22:17
("file:/BookSource.txt"); ---> ("/BookSource.txt");

Путь, как минимум, должен быть таким.

Автор: Stalnoj 29.11.2005, 23:02
Цитата(Mihail @ 29.11.2005, 20:49)
как работать с файлами в "J2ME Wireless Toolkit 2.2".
строка:
bookSource_streamConnection = (StreamConnection)Connector.open("file:/BookSource.txt");

Всё компилирется нормально, но когда доходит до загрузки файла выдаёт:
"java.lang.IllegalArgumentException: Missing protocol separator"

Missing protocol separator - программа сократ переводит: "Потеря разделителя протокола" - как это понимать?

Вообще, StreamConnection использовать в J2ME для работы с файлами не представляется мне возможным.. Хотя может кто-нибудь и знает, как это делать.

Вот, код, который читает данные из файла:

Код

        String data = "";

        try {
            InputStream iStream = getClass().getResourceAsStream("/data.txt");
            InputStreamReader isReader = new InputStreamReader(iStream);

            int symbol = isReader.read();

            if (symbol != -1) {
                do {
                    data += (char)symbol;

                    symbol = isReader.read();
                } while (symbol != -1);
            }
        } catch (Exception ex) {
            System.out.println("Error: " + ex);
        }

        System.out.println("data: " + data);


Пользуйтесь!

Автор: erka 30.11.2005, 11:52
Так ты сможешь только читать файл и только тот, что находиться в jar-е.

Код

            String filePath = "file:///root1/data.txt";
            FileConnection conn = (FileConnection) Connector.open(filePath, Connector.READ_WRITE);


На реальном телефоне нужна поддержка JSR-75 для этого кода.

Автор: Гость_Mihail 2.12.2005, 20:18
А вот вам ещё вопрос:
Процедуру рисования иожно осущиствить только из функции paint()?
Если нет, то как рисовать с других мест в коде?

И ещё: как нарисовать только часть рисунка а не весь? То есть фрагментик.
Возможно ли это без применения sprite?

Автор: javastic 5.12.2005, 10:09
Только через метод paint, кусочек отрисовать можно, сделав так чтобы он выходил за рамки видимости.

Автор: Гость_Quest 7.12.2005, 19:15
Достала меня эта java...
Ну как узнать как сделать переменныю ссылку на процедуру?
Допустим есть процедуры "процедура1()" и "процедура2()" есть переменная "переменная", необходимо вот что:
хочу процедуру вызывать так:
переменная();
А вызываться будет та процедура, на которую указывает переменная.
Ну и как это сделать на j2me?

Автор: LSD 7.12.2005, 21:19
Как 2 байта переслать smile

Создаем интерфейс:
Код
public interface CommandExecutor
{
  public int executeCommand(String command, Object[] params);
}


Реализуем его парой классов:
Код
public class Command1 implements CommandExecutor
{
  public int executeCommand(String command, Object[] params)
  {
    ...
  }
}

public class Command2 implements CommandExecutor
{
  public int executeCommand(String command, Object[] params)
  {
    ...
  }
}


А теперь можем создать два объекта и вызывать их методы одним и тем же кодом
Код
CommandExecutor executor;
executor = new Command1();
executor.executeCommand("Hello World!", null);
executor = new Command2();
executor.executeCommand("Hello World!", null);

Автор: Гость_Quest 8.12.2005, 06:21
// однако про interface надо тоже почитать
Итак, как я понимаю, без заведения новых классов не обойтись. Но тогда можно и так:
public abstract class mysclass {

// Абстрактная процедура
public abstract void myproc();

// Конструктор одни на всех.
buplic mysclass() {}

}

То есть создаём некоторую абстрактную процедуру. Теперь делаем так:

class class_myclass1 extends myclass{
public void myproc() {
// Тут описаны одни действия
}
}

class class_myclass2 extends myclass{
public void myproc() {
// Тут описаны другие действия действия
}
}

Теперь создаём переменные с этими классами

myclass myvar; // это мы создали переменную для хранения данного объекта
myvar = new class_myclass1(); // можно и myclass2

Хотя типы myclass и class_myclass1 немного различны, но работать это будет нормально.
теперь при вызове

myvar.myproc();

Может случаться разное.

А без заведения новых классов никак?????

Автор: Гость_Quest 8.12.2005, 06:27
И ещё одно сообщение от меня.
В PHP это делается так(немного в синтаксисе могу ошибаться - давно не программировал).

procedure1()
{
// тут действия1;
}

procedure2()
{
// тут действия2;
}

Переменные в PHP не объявляются вообще...
Класть в переменную "myvar" можно любую функцию и вызывать её потом:

$myvar = procedure1;
$myvar(); // это так мы вызвали procedure1
$myvar = procedure2;
$myvar(); // это так мы вызвали procedure2

Автор: batigoal 8.12.2005, 09:01
Цитата
Итак, как я понимаю, без заведения новых классов не обойтись. Но тогда можно и так:

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

Что касается второго варианта, наверное, он принципиально реализуем (с помощью механизма рефлексии), но, уверен, следует воспльзоваться первым вариантом, т.к. именно он соответствует правильному ООП подходу.

Автор: Гость_Quest 8.12.2005, 17:03
Надо же какая странная эта java, а программировать всё равно хочеться.
Придётся пока с интерфейсами работать.
Но может кто-нибудь всё таки скажет: "Нельзя без заведения новых классов", или "Можно, вот как это делается...", а пока хоть вешайся...

Автор: Гость_Quest 8.12.2005, 18:44
Всё пытаюсь зоздать класс для кнопок игры, но никак не удаётся - получается работоспособно, но гиганско и на мой взгляд так не делается.
Кто знает как организовать кнопку?

Автор: LSD 9.12.2005, 20:04
Цитата
Но может кто-нибудь всё таки скажет: "Нельзя без заведения новых классов", или "Можно, вот как это делается...", а пока хоть вешайся...

Можно, но есть куча но! Код работает медленней (вызов методов через рефлексию дольше в 10-50 раз), весьма ненадежно (на этапе компиляции никаких проверок не будет, только в runtime), и не уверен что это будет работать на J2ME.
Если инетерес еще не пропал, то могу привести код.

Автор: Гость_Quest 11.12.2005, 13:40
С кнопками я уже сам разобрался - решил сделать как и стандартные Command.
То есть в кнопку кладём номер команды, а функцию они все одну вызывают.

Автор: Гость_Quest 17.12.2005, 10:28
Уменя теперь 3 вопроса:

1) Можно ли создавать записи "coord" с вложенными в неё
переменными X и Y (coord.x, coord.t),
не создавая класса:
class coordinates {
int x, y; }

2) GameCanvas есть repaint() и flushGraphics() какая между ними
разница?

3) Я вывожу часть рисунка, сделав "setClip" и бросая на экран весь
рисунок - рисуется только там где можно, т.е. так как мне надо.
Так ведь правильновыводить часть рисунка? Я замедления работы не замечаю.

Автор: batigoal 17.12.2005, 12:08
Цитата

1) Можно ли создавать записи "coord" с вложенными в неё
переменными X и Y (coord.x, coord.t),
не создавая класса:
class coordinates {
int x, y; }

Думаю, что нет. А зачем?

Автор: nagliyvred 28.1.2006, 21:53
Цитата

1) Можно ли создавать записи "coord" с вложенными в неё
переменными X и Y (coord.x, coord.t),
не создавая класса:
class coordinates {
int x, y; }

Нет
Цитата

2) GameCanvas есть repaint() и flushGraphics() какая между ними
разница?

В MIDP 2.0 поддерживается двойная буфферизация. Смысл в том что при вызове repaint() jvm вызывает метод paint() передавая ему в качестве параметра текущий графический контекст ( объект класса Graphics), и в нем происходит рисование - последовательный вызов методов drawXXX() - обращаемся к видеопамяти многократно. А можно создать дополнительный внеэкранный буфер - сначала нарисовать туда а потом разом вывести на экран. Так вот в MIDP 2.0 это уже реализовано (хотя несложно реализовать и самому). Для этого нужно получить ссылку на графический контекст методом getGraphics(), рисовать в него а затем разом выводить содержимое буфера на экран методом flushGraphics(); В принципе в MIDP 2.0 можно использовать и repaint() но рекомендуется все-таки использовать дв. буфферизацию.
Вот приблизительное отличие в коде:
Код

//MIDP 1.0 
public void paint(Graphics g)
{
    g.drawString("blablabla", x, y, Graphics.TOP|Graphics.LEFT);
}

private void mainLoop()
{
    //some code here
    repaint();
}

//MIDP 2.0 
//ссылка на внеэкранный буфер - не меняется 
Graphics buffer;

//....при инициализации установим буфер
private void initialization()
{
    buffer = getGraphics();
    // somthing else
}

public void draw() // рисование вынесено в отдельный метод хотя здесь это не обязательно
{
    buffer.drawString("blablabla",x, y, Graphics.TOP|Graphics.LEFT);
    buffer.drawString("blablabla", x, y, Graphics.TOP|Graphics.LEFT);
    
    flushGraphics(); //после того как нарисовали в буфер все что хотели - выводим на экран
}

private void mainLoop()
{
    //.......
    draw();
    //..........
}

   

Цитата

3) Я вывожу часть рисунка, сделав "setClip" и бросая на экран весь
рисунок - рисуется только там где можно, т.е. так как мне надо.
Так ведь правильновыводить часть рисунка? Я замедления работы не замечаю.

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

Автор: NewDev 15.5.2006, 11:45
Не подскажет ли кто совсем начинающему..

Как создать файл и записать туда что-нибудь?
У нас терминал Siemens TC65.
Или как вообще лучше отладочные выводы делать..
 

Автор: javastic 16.5.2006, 10:18
NewDev, поищи поиском на этом форуме и можно обнаружить много чего интересного.
Многие уже устали отвечать на одно и тоже по 50 раз.  smile  

Автор: ThisIAmUnknown 16.7.2006, 11:38
Скажите, пожалуйста, а JSDK 2 будет работать с J2SE. А то у меня нет возможности закачать новую его версию. 

Автор: javastic 31.7.2006, 13:16
ThisIAmUnknown, что-то ничего не понятно из письма. Конкретнее можно? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)