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


Автор: Yugine 12.3.2006, 13:15
Эмулятор картинку грузит, а телефон нет. (телефон у меня Siemens CX70)?

гружу картинку так:

Image I1;

//........

try {
I1 = Image.createImage("/1.png");
}
catch (IOException ioe){}


пользуюсь Wirelles Toolkit 2.0

в WTK картинка лежит в папке res

если открываь jar архив, то она лежит сразу там, никуда не вложена.

Автор: W0LF 12.3.2006, 16:47
а что значит "грузит"?
добавь в блок catch вывод на экран какого-нидь сообщения типа "can't load picture '1.png' ". Может картинка загружается, а при отображении какие-нидь проблемы возникают.

Автор: Yugine 13.3.2006, 01:09
я так и делал. добавлял сообщение. на эмуляторе норм. а на телефоне оно вылазит

Автор: Dancer 13.3.2006, 13:32
а так пробовал?

Код

class MyClass extends MIDlet {

    Form form = new Form("My Form");
    Display disp = Display.getDisplay(this);
    InputStream input = getClass().getResourceAsStream("1.png");
    Image img;

//........

    try {
        img = Image.createImage(input);
        form.append("Image " + img + " created successfully");
        disp.setCurrent(form);
    } catch (Exception e){
         form.append("input = " + input + "\n");
         form.append("Can't create IMAGE");
         disp.setCurrent(new Alert("ERROR","Exception: "+e.toString, AlertType.ERROR), form);
    }

}

Автор: W0LF 13.3.2006, 22:14

Код

img = Image.createImage(input, 0, input.length)
)
Так правильнее
Но вряд ли это поможет. Он не может найти файл. А как его считать, то уже другое дело.

Автор: Nemesis 14.3.2006, 03:33
Yugine приведи весь код, мало ли что написал... и каких размеров картинка вообще?

Автор: Yugine 14.3.2006, 20:41
вот такой у меня код, проверки и т.п. я оттуда убрал, ну и переписал, как мне Dancer посоветовал:


import javax. microedition.lcdui.Canvas;
import javax. microedition.lcdui.Command;
import javax. microedition.lcdui.CommandListener;
import javax. microedition.lcdui.Display;
import javax. microedition.lcdui.Displayable;
import javax. microedition.lcdui.Graphics;
import javax. microedition.lcdui.Image;
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.game.*;
import java.io.IOException;
import java.io.*;

public class TryCanvas extends MIDlet{
MyCanvas C1;
public static TryCanvas midlet;


InputStream input = getClass().getResourceAsStream("/bear.png");
Image I1;

Display d;

public TryCanvas(){super(); midlet=this;}

public void destroyApp(boolean destroy)
{
C1 = null;
notifyDestroyed();
}

public void pauseApp(){}

public void startApp(){

C1 = new MyCanvas();
try {
I1 = Image.createImage(input);
}
catch (IOException ioe){}
d=Display.getDisplay(this);
d.setCurrent(C1);
}

}

class MyCanvas extends Canvas implements CommandListener{
int width;
int height;
Command exit = new Command("exit", Command.EXIT,1);

int x;
public MyCanvas(){
super();

width=getWidth();
height=getHeight();
addCommand(exit);
setCommandListener(this);
}


public void paint (Graphics g){
int cx = g.getClipX();
int cy = g.getClipY();
int ch = g.getClipHeight();
int cw = g.getClipWidth();
int color = g.getColor();
g.setColor(58, 162, 211);
g.fillRect(cx, cy, cw, ch);
//g.setColor(253, 251, 118);

g.drawImage(TryCanvas.midlet.I1, 0, 0, Graphics.TOP | Graphics.LEFT);

}
public void commandAction (Command c, Displayable d){
if (c==exit){TryCanvas.midlet.destroyApp(true);}
}

}



картинка в формате png имеет размер 30x90 точек



Автор: Nemesis 15.3.2006, 01:34
Понимаешь в чем может быть дело, ведь когда ты загружаешь изображение в image, то код дальше исполняется, и получается так, что ты вызываешь дальше d=Display.getDisplay(this);, а потом d.setCurrent(C1);. Когда происходит вызов d.setCurrent(C1);, тогда и происходит вызов метода paint (1 раз, потом просто идет простОй мидлета), который пытается вывести изображение, еще полностю не загрузившееся (это на эмуляторе картинки почти влет грузятся,а на телефоне все по-другому несколько). Это первое что бросилось мне в глаза. Могу посоветовать вынести процедуру загрузки картинки в конструктор TryCanvas(), но честно говоря несколько необычная структура программы, не в обиду будет сказано.

Скажи, а заливка срабатывает?

g.setColor(58, 162, 211);
g.fillRect(cx, cy, cw, ch);

Автор: javastic 15.3.2006, 14:39
Yugine,
M
javastic
Пользуйся подсветкой кода!!
.

Положи картинку в папку с сырцами, не клади в res, и первый вариант у тебя заработает.
Ты случаем не перенёс проект из WTK в некое IDE (или наоборот)?
Размер картинки какой?

Автор: Yugine 16.3.2006, 22:10
картинку я положил уже везде и в паку с ресурсами и с исходником.

когда я делаю так как советовал dancer, у меня срабатывает NullPointer exception

когда делаю так как я написал в первом случае, тогда просто не загружается картинка.

to Nemesis: заливка срабатывает. загрузку изображения я поместил в конструктор канваса - не помогло.


может у кого-нить есть телефон siemens и уже писали для него чего-нибудь - киньте пожалуйста рабочий исходник или дайте ссылку

Автор: javastic 17.3.2006, 12:54
Yugine, скачай пример по этой ссылке http://vitalich.com/j2me/examples/Imager.rar и положи его в папку apps своего WTK, заупусти, а потом сообщи нам, отобразилась картинка или нет.
Пример рабочий.

Автор: Yugine 18.3.2006, 17:22
Спасибо огромнейшее, проблема была в том, что у картинки расширение .PNG, а я написал маленькими png.

Автор: W0LF 18.3.2006, 19:54
странно как-то... у меня была такая же проблема, но наоборот. нужно было использовать нижний регистр для расширения...

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