| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java ME (J2ME) > Ошибка в примере Горнакова |
| Автор: aaa25 20.1.2011, 11:23 |
| в книге Горнакова "программирование на j2me" в примере 8.1 в строке "public TiledLayer Fon()throws IOException" netbeans ПРИ КОМПИЛЯЦИИ выдает ошибку "at MyGameCanvas.Fon(MyGameCanvas.java:49)". (WTK -тоже) что это за ошибка и как ее исправить? /** листинг 8.1 @author Станислав Горнаков класс MyGameCanvas */ // подключаем исключение IOException import java.io.IOException; import javax.microedition.lcdui.*; import javax.microedition.lcdui.game.*; public class MyGameCanvas extends GameCanvas implements Runnable { // создаем объект класса TiledLayer private TiledLayer fonPole; // создаем объект класса LayerManager private LayerManager lm; // логическа переменная для выхода из цикла boolean z; public MyGameCanvas() throws IOException { // обращаемся к конструктору суперкласса Canvas super(true); // инициалезируем fonPole fonPole = Fon(); // создаем менеджер уровней lm = new LayerManager(); // добовляем объект fonPole к уровню lm.append(fonPole); } public void start() { z = true; // создаем и запускаем поток Thread t = new Thread(this); t.start(); } /* метод создающий объект класса TiledLayer и загружающий фоновое изображение */ public TiledLayer Fon()throws IOException { // загрузка изображения из файла ресурса Image im = Image.createImage("/fon.png"); // создаем объект класса TiledLayer fonPole = new TiledLayer(/*столбцы*/10,/*строки*/10, im,/*ширина*/15,/*высота*/15); // разметка игрового поля int[] pole = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 5, 5, 5, 1, 1, 5, 1, 1, 1, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 6, 1, 1, 1, 1, 1, 1, 6, 6, 6, 6, 2, 4, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 4, 4, 4, 3, 3, 3, 3, }; // цикл считывающий разметку поля for(int i = 0; i < pole.length; i++) { /* присваеваем каждому элементу игрового поля определенную ячейку изображения im*/ fonPole.setCell(i % 10, i / 10, pole[i]); } return fonPole; } public void stop(){ z = false; } public void run() { // получаем графический контекст Graphics g = getGraphics(); // бесконечный цикл while (z) { // рисуем графические элементы init(g); // останавливаем цикл на 20 милесекунд try { Thread.sleep(20); } catch (java.lang.InterruptedException zxz) {}; } } private void init(Graphics g) { // белый цвет фона для перерисовки экрана g.setColor(0xffffff); // размер перерисовки экрана g.fillRect(0, 0, getWidth(), getHeight()); // рисуем уровень с левого верхнего угла дисплея lm.paint(g, 0, 0); // двойная буферезация flushGraphics(); } } |
| Автор: oxigen 20.1.2011, 12:15 |
| Файл "/fon.png" есть на месте? |
| Автор: aaa25 20.1.2011, 14:15 |
| есть ( нормально в папке res) |
| Автор: oxigen 20.1.2011, 15:44 |
| Какую именно ошибку выдает? |
| Автор: aaa25 20.1.2011, 15:55 |
| вот так ошибку выдает netbeans: java.lang.IllegalArgumentException at javax.microedition.lcdui.game.TiledLayer.<init>(), bci=66 at MyGameCanvas.Fon(MyGameCanvas.java:33) at MyGameCanvas.<init>(MyGameCanvas.java:19) at MainGame.startApp(MainGame.java:21) at javax.microedition.midlet.MIDletTunnelImpl.callStartApp(), bci=1 at com.sun.midp.midlet.MIDletPeer.startApp(), bci=7 at com.sun.midp.midlet.MIDletStateHandler.startSuite(), bci=269 at com.sun.midp.main.AbstractMIDletSuiteLoader.startSuite(), bci=52 at com.sun.midp.main.CldcMIDletSuiteLoader.startSuite(), bci=8 at com.sun.midp.main.AbstractMIDletSuiteLoader.runMIDletSuite(), bci=161 at com.sun.midp.main.AppIsolateMIDletSuiteLoader.main(), bci=26 Добавлено через 11 минут и 13 секунд ошибка на рисунке |
| Автор: math64 20.1.2011, 16:42 |
| Всё-таки - либо "/fon.png" не на месте, либо он не тех размеров. Проверяй содержимое .jar в папке dist, он должен быть в корне и строчными буквами. |
| Автор: oxigen 21.1.2011, 11:45 |
| Из документации: public TiledLayer(int columns, int rows, Image image, int tileWidth, int tileHeight) Throws: NullPointerException - if image is null IllegalArgumentException - if the number of rows or columns is less than 1 IllegalArgumentException - if tileHeight or tileWidth is less than 1 IllegalArgumentException - if the image width is not an integer multiple of the tileWidth IllegalArgumentException - if the image height is not an integer multiple of the tileHeight Так что проверь высоту и ширину своей картинки. Кратны ли они 15-ти? |
| Автор: aaa25 23.1.2011, 22:24 |
| похоже, действительно ошибка в рисунке fon.png, в ресурсах он 64\48 я заменил его рисунком 60\45 - прога выдала какой-то бред, но ошибки уже нет. спасибо, это уже кое-что... |