forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ (http://forum.boolean.name/forumdisplay.php?f=48)
-   -   Пишем либы для MidletPascal на JAVA (http://forum.boolean.name/showthread.php?t=440)

odd 09.07.2008 22:31

Ответ: Пишем либы для MidletPascal на JAVA
 
А файл gr.class в проект добавлял? Вообще библиотеки к MP лучше писать одним файлом, а не разбивать на кучу файлов.

Phantom 09.07.2008 22:43

Ответ: Пишем либы для MidletPascal на JAVA
 
Всё добавлял. Не работает =( Так я просто тренируюсь, изучаю. Хотел написать класс, а добавить его к мидлет паскалю при помощи либы. Вот =( Не выходит...
- - -
Блин. У меня по ходу что-то с компилятором не в порядке... Пытаюсь откомпилировать либу пилигрима, мне ошибку пишет:
Код:

Lib_text.java:9: cannot find symbol
symbol  : variable G
location: class M
          MLT.SetTextPar(x, y, w, h, dy, fsz, fst, ft, M.G, s);
1 error

Указатель показывает на точку между M.G

Piligrim 09.07.2008 23:22

Ответ: Пишем либы для MidletPascal на JAVA
 
Я если честно не уловил где g, который Graphics в классе gr получает значение M.G? Если этого нет, то простите, на чем мы рисуем?

Phantom 10.07.2008 00:55

Ответ: Пишем либы для MidletPascal на JAVA
 
Ыыы... Пардон... Ща попробую исправить. Но, кстати, когда пытаюсь откомпилить твою либу, как раз компилятор ругается на M.G, которое ты передаёшь классу. Я уж не знаю почему. Класс M.class лежит где надо, его компилятор видит.
- - -
Добавил спустя пару минут:
Мда... Теперь компилятор и на мою либу ругается с точно такой же ошибкой. Указатель показывает на точку между M и G. То есть, как я понимаю, класс M.class видит, но пишет, что переменной G нет или что-то типа того =( Раньше пробовал подобное делать, вроде получалось... Что-то тут нездоровое...
- - -
Ещё спустя минут 7:
Блин. Я вообще ничего не понимаю. Заменил M.class на другой, из другого проекта - всё нормально откомпилировало! Видимо, у меня ещё и класс этот какой-то не сосем нормальный был... Но ведь в принципе от приложения не зависит. От любого ведь должен подойти, мидлетпаскалевского, разумеется.
- - -
Спустя почти два часа:
А можно как-нибудь из либы передать M.G сразу в класс, а не в определённую функцию? Можно, конечно, сразу в классе прописать
private Graphics g=M.G;
тогда работает. Но если поставить себе такое условие, что нельзя так делать. А в классе две функции. Одна из них будет через либу использоваться в паскале, а вторая многократно вызывается первой. Обоим им нужен M.G. Пока сделал, чтобы из первой во вторую передавалась переменная g в качестве параметра. То есть, первая из либы получает M.G, юзает там его, потом вызывается много раз вторая функция и каждый раз передаётся в неё полученный M.G... Во как.
- - -
Спустя ещё два часа:
Всё. Пора убить телефон ап стену и выкинуть комп в окно. Ничего у меня не получается. На эмуляторе идёт, на сименсе белый экран и висит. У брата на смарте тоже белый экран и висит. Переписал всё просто в либу, без класса. Ситуация не изменилась. Добавил в каждую функцию try/catch, всё равно на эмуляторе идёт, а на телефонах нет. В чём может быть дело? Памяти, вроде, тут не использует много. Всё только примитивная работа с графикой...

odd 10.07.2008 08:18

Ответ: Пишем либы для MidletPascal на JAVA
 
А что за компилятор, если не секрет? Какая среда разработки?

Phantom 10.07.2008 14:12

Ответ: Пишем либы для MidletPascal на JAVA
 
SUNовский компилятор. Через командную строку. javac.exe и preverify1.1.exe...

ViNT 10.07.2008 14:42

Ответ: Пишем либы для MidletPascal на JAVA
 
Не советую компилять либы напрямую через javac(нсли это WTK) - у меня только 2 из 10 нормально компилятся, на остальных мобила зависает - моторовский отладчик в MIDWay пишет ошибку верификации класса. Юзайте JB и будет вам счастье =).

Piligrim 10.07.2008 15:08

Ответ: Пишем либы для MidletPascal на JAVA
 
Можно и напрямую javac, просто не забывайте добавлять -source 1.3 -target 1.3, чтобы соответсвовало CLDC 1.1

Phantom 10.07.2008 15:19

Ответ: Пишем либы для MidletPascal на JAVA
 
Пилигрим, так ведь прога-то получается в CLDC 1.0. По крайней мере так в манифесте прописано. Но попробую добавить эти ключи. А JB я как-то, вроде, качал, точно не помню. Ещё когда в первый раз хотел заняться Джавой. Что-то он мне не понравился, может путаю, или это я про MS VS... О_о То, что VS мне не понравился - это точно, один дебагер только ваще задрал. В основном брата =) У него постоянно из игр выкидывало с какими-то ошибками =) А вообще, мне среду разработки не надо, компилятора хватает. Так понять суть работы проще. А ещё подумываю написать он лайн компилятор, чисто так, ради интереса. Буду с локала запускать. Кто тестером будет? =)
- - -
Чуть позже:
Пилигрим, ты гений! Добавил ключи и всё работает!!!
- - -
Позднее:
А у брата на смарте так и белый экран :'(

Piligrim 10.07.2008 17:31

Ответ: Пишем либы для MidletPascal на JAVA
 
для CLDC 1.0 по-моему вообще надо -target 1.1.
Да, вот точно:
Цитата:

По реализации пересекающихся с J2SE классов, версии байт-кода CLDC 1.0 соответствует JDK 1.1, CLDC 1.1 –- JDK 1.3.

Phantom 10.07.2008 19:17

Ответ: Пишем либы для MidletPascal на JAVA
 
Написал -source 1.1 -target 1.1 вместо -source 1.3 -target 1.3.
Компилятор ругался на -source 1.1.
Написал -source 1.3 -target 1.1 - всё заработало!!! И на сименсе, и на смарте, и на эмуле!!! Родили, блин :D :D :D Вот оно - счастье! =)
- - -
P.S: Ничего, что эта тема больше походит на мой блог?

Phantom 11.07.2008 06:57

Ответ: Пишем либы для MidletPascal на JAVA
 
Блин, Джава вообще со строками работать умеет??? Я полночи инфу в гугле ищу, ещё смотрю книжки Пирумяна и Горнакова. Ничего не могу толком найти. Или я чего-то не понимаю. Как мне, например, получить субстроку от строки, начиная с определённого по счёту символа? Как узнать длину строки? Как поиндексно обращаться к строке? Ну например:
Код:

String s = "Привет";
String str1 = s[0]; // str = "П";
String str2 = s[3]; // str = "в";

Ну хоть что-то, блин, посоветуйте, ведь в мидлет паскале есть функции для работы со строками! Пробовал декомпилировать мидлетпаскалевский S.class - ничего не понял =(
- - -
Позже:
Создал по аналогии с декомпилированным мидлетпаскалевским классом вот такую функцию:
Код:

public static int myfunc(String s,int i){
return s.charAt(i);
 }

Методом тыка довольно быстро понял, что функция возвращает ASCII код символа с номером i строки s. Причём, если указать несуществующий индекс, то есть больше, чем длина строки, то мидлет повисает =) Уже что-то... На основе этого кучу самодельных функций для обработки строк можно сделать =) Но вот нужно ли? Должны быть в джаве ещё какие-нибудь функции!
- - -
Я так понимаю, в моём примере выше s - можно назвать объектом типа String, а всё, что после приписывается через точку - это типа методы что ли? Это я просто так спрашиваю, так как с формулировками ещё не особо разобрался...

odd 11.07.2008 08:13

Ответ: Пишем либы для MidletPascal на JAVA
 
Ну ты даешь. Это же азы.

String s = "Привет";

Длину строки теперь можно узнать так:

int len = s.length();

Вырезать одну букву:

char ch = s.charAt(0);

Отрезать кусок текста:

String s2 = s.substring(2, 5); // Результат: "иве"

PS: Юзай NetBeans 6.1 и будет тебе щастье. Советую также заглядывать в документацию по MIDP2.0 из пакета WTK.

Phantom 11.07.2008 08:21

Ответ: Пишем либы для MidletPascal на JAVA
 
Спасибо огромное! Я заглядывал в документацию MIDP2.0 из пакета WTK, только дальше главной страницы не пошёл, что-то мне всё показалось там не в тему =)
- - -
Слушайте, а вот если я использую indexOf(">") и в строке находит этот символ, то возвращается его индекс в строке, а если нет - мидлет повисает на этом месте =( А можно как-нибудь сделать так, чтобы в таком случае возвращался индекс последнего символа ну или символ конца строки типа?.. Пробовал засунуть эту функцию в условие if и приравнять внутри условия к нулю:

if((i=s.indexOf(">"))==0) i=s.length()-1;

То есть по моей логике если символ будет найден в строке, то возвратится TRUE и условие будет ложным, а если символ не найден, то возвратится FALSE, который при сравнивании с нулём выдаст TRUE и i будет равно последнему символу =) В php я подобным способом пользуюсь часто, думал и сдесь прокатит... Так ведь нет... Мидлет повисает при запуске... Почему? Может вставить try? А он не тормозит в общем? Просто я после php помешан на оптимизации =) А в скобочках у catch() что писать? Смотрел исходники разные, там по-разному пишут. В общем, что в таких ситуациях обычно делают при кодинге на Джаве?
- - -
P.S: А компилятор у меня теперь почти никогда не ругается, то ли совет Пилигрима помог, то ли я меньше ошибок делать стал =)
= = =
Блиин. Так тоже повисает:

try{
i=s.indexOf(">");
}catch(Exception exception){
i=s.length()-1;
}
= = =
Ещё такой вопрос. Если у меня есть строка "32fd45" - цвет rrggbb, то как мне эту строку самым простым способом заюзать в setColor?

Phantom 12.07.2008 10:18

Ответ: Пишем либы для MidletPascal на JAVA
 
То есть нужно как-то строку вида "rrggbb" превратить в 0xrrggbb (это как называется? Константа? Ну типа три байта). Можно, конечно, написать функцию, которая пропарсит строку и сделает три числа 0-255 для передачи их в функцию setColor(), но мне кажется можно как-то проще это сделать.


Часовой пояс GMT +4, время: 20:22.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot