Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > JAVA Micro Edition > Программирование

Программирование Вопросы связанные с программированием в JAVA

Ответ
 
Опции темы
Старый 24.08.2008, 21:05   #1
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,271
Написано 752 полезных сообщений
(для 1,830 пользователей)
Не компилируется

Не хотел создавать ради этого новую тему, но после трёх часов ломания мозгов всё же решился. =) Мне стало интересно, смогу ли я декомпилировать игру и собрать её заново. Выбрал игрушку попроще, распаковал, декомпилировал, выбрал класс, над которым буду издеваться, попробовал его скомпилировать. Куча ошибок. Логически подумав над строками, в которых ошибки, пришёл к выводу, что там неправильно декомпилировались блоки try - catch, написал как надо, было ещё пара ошибок. С GOTO. Я вообще понятия не имею какой синтаксис у goto, так как юзал этот оператор только в бэйсике на БК 0100 1986 года выпуска и это было довольно давно. Но в итоге разобрался вроде, хотя там было непонятно весьма. Короче говоря, мне удалось скомпилировать класс без ошибок. Но ошибка возникла при верификации О_о
Error preverifying class Playfield
Class loading error: Wrong name
Playfield - это имя класса.
Компилировал через bat файл, который сам написал, через javac. Возможно у меня в команде bat файла ошибка, так как я до этого никогда не пытался скомпилировать классы, которые в итоге будут лежать на в корне jar. Там структура файлов в игре такая, что все классы не в корне, а в папке внутри jar лежат. Возможно я с путями что-то напутал, но мне кажется, что всё же причина в чём-то другом, так как когда я экспериментировал с путями, то ошибка не такая была. В общем, подскажите, в чём может быть дело. Если нужно, могу выложить саму игру и исходник, который получился у меня после исправлений.
(Offline)
 
Ответить с цитированием
Старый 24.08.2008, 23:06   #2
Piligrim
Оптимист
 
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений
(для 259 пользователей)
Ответ: Не компилируется

преверификация важн для МЕ. она проверяет соответствие cldc 1.x, при компиляции какие параметры привызове javac?
а про папки, если в начале класса написано package com.mp;
то класс должен лежать в jar в папке com/mp
(Offline)
 
Ответить с цитированием
Старый 24.08.2008, 23:40   #3
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,271
Написано 752 полезных сообщений
(для 1,830 пользователей)
Ответ: Не компилируется

Параметры все верные написаны. Уже до этого много раз компилировал. package написан. Положил в папку, которая там написана - догадался =) Проблема не в этом. Или не совсем в этом. Мне кажется я всётаки накосячил где-то...
- - -
Вот что в bat файле написано:
cd src
..\com\bin\javac -g:none -source 1.3 -target 1.1 -classpath ..\tmpclasses;..\com\midpapi20.jar;..\com\cldcapi1 0.jar -d ..\tmpclasses bomber\Playfield.java
cd ..
com\preverify1.1.exe -classpath tmpclasses;com\midpapi20.jar;com\cldcapi11.jar -d classes bomber\Playfield

bomber - это папка. Playfield - класс. Первая часть - компиляция - работает, создаётся класс файл в tmpclasses\bomber\. Вторая часть - верификация - не работает, выдаёт вышеупомянутую ошибку.

Последний раз редактировалось Phantom, 25.08.2008 в 02:30.
(Offline)
 
Ответить с цитированием
Старый 25.08.2008, 02:51   #4
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,271
Написано 752 полезных сообщений
(для 1,830 пользователей)
Ответ: Не компилируется

Вот исходник (уже подправленный).
Вложения
Тип файла: zip Playfield.zip (7.1 Кб, 532 просмотров)
(Offline)
 
Ответить с цитированием
Старый 25.08.2008, 11:50   #5
Piligrim
Оптимист
 
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений
(для 259 пользователей)
Ответ: Не компилируется

Исходник как раз нормальный. У тебя в preverify какой класс проверяется? В какой он папке лежит? В tmpclasses. А где она показана prevefiry? пиши тогда уже tmpclasses\bomber\Playfield
(Offline)
 
Ответить с цитированием
Старый 25.08.2008, 14:28   #6
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,271
Написано 752 полезных сообщений
(для 1,830 пользователей)
Ответ: Не компилируется

Error preverifying class tmpclasses\bomber\Playfield
Class loading error: Wrong name
То же самое. Класс-то находит, так как если я от балды введу имя класса, то ошибка другая:
Error loading class tmpclasses\bomber\Playfields
Там внутри класса объявляется ещё один небольшой класс. Может что-то с этим связано? Я такого ещё не встречал. Может на его имя почему-то ругается?
(Offline)
 
Ответить с цитированием
Старый 25.08.2008, 15:29   #7
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,271
Написано 752 полезных сообщений
(для 1,830 пользователей)
Ответ: Не компилируется

Вот сама игра. Там, внутри джар архива исходник Playfield лежит. Попробуй скомпилировать у себя, может получится.
Вложения
Тип файла: zip Bomber.zip (49.2 Кб, 490 просмотров)
(Offline)
 
Ответить с цитированием
Старый 25.08.2008, 16:51   #8
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,271
Написано 752 полезных сообщений
(для 1,830 пользователей)
Ответ: Не компилируется

Уахууууууууууууууууууууу!!! Получилось скомпилировать через НетБеанс!!! Только вот очень заумно! Создал новый проект, скомпилировал мидлет по молчанию. В папке с проектом создались нужные папки. Ну я тупо их открыл, положил везде, где нужно и не нужно классы от игры, положил в src\bomber исходник Playfield, закрыл проект в НетБеансе, открыл его же, скомпилировал (!!!) без ошибок, потом вручную поменял манифест в джар архиве, добавил ресурсы и т. п. И ИГРА ПОШЛА НА ЭМУЛЯТОРЕ КАК НИ В ЧЁМ НЕ БЫВАЛО!!! WOOOW!!! В такие моменты я обычно говорю: "Вот оно - счастье!" =) Если игра была обфусцирована, то я ожидал большего, если уж я все корявости сумел исправить в декомпилированном классе, значит это не так уж и сложно... Но всё таки я не понимаю, где у меня ошибка с javac...
(Offline)
 
Ответить с цитированием
Старый 25.08.2008, 20:53   #9
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,271
Написано 752 полезных сообщений
(для 1,830 пользователей)
Ответ: Не компилируется

Ээх... Декомпилировал какой-то мод оперы мини. Пару самых маленьких классов скомпилировать получилось, но дальше начались проблемы. Не видит переменные в других классах. Вот там видимо жёстко обфусцировано. Декомпилятор, наверно, запутался и что-то не так декомпилировал. Жаль... Я уж на радостях подумал, что теперь что угодно смогу декомпилировать-скомпилировать =)
(Offline)
 
Ответить с цитированием
Старый 27.08.2008, 17:12   #10
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,271
Написано 752 полезных сообщений
(для 1,830 пользователей)
Ответ: Не компилируется

Я уже спрашивал, но вроде никто не ответил. Есть у меня классы g.class и b.class. В g.class объявлен метод readRes(), а в b.class объявлена переменная Graphics g.
В итоге, если я хочу обратиться из класса b к методу readRes(), вот так:
g.readRes("/res");
то компилятор выдаёт ошибку, так как у меня в классе b есть переменная g. То есть путаница видимо происходит.
Вопрос: как мне вызвать readRes() из класса b, не меняя названий переменных и классов?
(Offline)
 
Ответить с цитированием
Старый 27.08.2008, 18:01   #11
Piligrim
Оптимист
 
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений
(для 259 пользователей)
Ответ: Не компилируется

Метод как я понимаю статический? У тебя локальная переменная закрывает глобальную. Лучше учись давать классам и переменным осмысленные имена. А так создай экземпляр класса
g newG = new g();
newG.readRes("/res");

через ж.., но хоть что-то
(Offline)
 
Ответить с цитированием
Старый 27.08.2008, 18:50   #12
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,271
Написано 752 полезных сообщений
(для 1,830 пользователей)
Ответ: Не компилируется

Ы, мне знакомые говорят, что я обфускатор ходячий. Я не знаю почему, но я всегда даю переменным короткие имена 1-3 буквы. Потом все говорят, что у меня код нечитаемый =) Но для меня переменные осмысленные, гг. Просто я максимально сокращаю, например, вместо left_key я бы создал переменную l, а если она занята, то переменную lk. =)
- - -
Так, а если метод не статический объявлять (я этого никогда не делал), то что это меняет в структуре программы? Что лучше использовать (в плане потребления и фрагментирования памяти, быстродействия и т. п.)?
(Offline)
 
Ответить с цитированием
Старый 27.08.2008, 21:27   #13
Piligrim
Оптимист
 
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений
(для 259 пользователей)
Ответ: Не компилируется

а если метод не статический, то это делать обязательно
(Offline)
 
Ответить с цитированием
Старый 27.08.2008, 22:46   #14
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,271
Написано 752 полезных сообщений
(для 1,830 пользователей)
Ответ: Не компилируется

Хм... Ну если писать какой-нибудь класс, который будет использоваться в различных приложениях, например, типа библиотеки с функциями для чего-то, то разумнее делать нестатичные методы, дабы каждый, кто будет использовать класс, создавал его экземпляр с любым, удобным для него названием. Хотя... Если писать класс для чего-то особого, то и название ему нужно давать именно осмысленное... Блин... Нафига всякой фигни напридумывали... =)
(Offline)
 
Ответить с цитированием
Старый 28.08.2008, 13:52   #15
Piligrim
Оптимист
 
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений
(для 259 пользователей)
Ответ: Не компилируется

если у тебя библиотека с функциями, то разумнее использовать как раз статические методы, а вот если класс наследник чей-то или интерфейсы имеет то тут без экземпляра не обойтись.
ЗЫ: Статические методы быстрее обычных.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему не компилируется? В чем ошибка? dimanche13 2D-программирование 9 18.04.2007 21:26
компилируется,но не пашет( carmageddonist Основной форум 28 12.01.2007 11:55


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2023, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com