Chương trình không hiển thị được trên màn hình điện thoại giả lập!

Lê Lộc

Member
12/3/13
131
7
18
28
Huế
Code này mình cũng làm theo tài liệu để test cài đặt plugin cho eclipse thôi, nhưng khi chạy thì màn hình kết quả vẫn blank, không hiện gì cả.

Code:
package com.cty.demoj2me;
 
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class DemoJ2ME extends MIDlet implements CommandListener {
    private Form mainForm;

    public DemoJ2ME() {
        mainForm = new Form("Lap trinh tren nen J2ME");
        mainForm.append(new StringItem(null, "Hello J2ME"));
        mainForm.addCommand(new Command("Exit", Command.EXIT, 0));
        mainForm.setCommandListener(this);
    }

    public void startApp() {
        Display.getDisplay(this).setCurrent(mainForm);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean un) {
    }

    public void commandAction(Command c, Displayable s) {
        notifyDestroyed();
    }
}
 

SITUVN

Well-Known Member
25/2/12
967
263
63
Bạn chưa cho Form hiển thị lên.
PHP:
Display d = Display.getDisplay(this);
d.setCurrent(mainForm);
 

Lê Lộc

Member
12/3/13
131
7
18
28
Huế
Vẫn không có gì trên màn hình giả lập???
Không biết có dính gì bên cấu hình không, mình làm theo đúng hướng dẫn rồi mà vẫn không hiện được kết quả?
 

Lê Lộc

Member
12/3/13
131
7
18
28
Huế
Mình cài đặt Eclipseme + Wrieless Took Kit 2.5.2
Như vậy đã đủ cấu hình yêu cầu chưa??
 

cungayngo

New Member
28/2/11
13
1
3
hihi.. đang định nói là vừa rồi tớ dùng netbean vs s40..:))
 

Lê Lộc

Member
12/3/13
131
7
18
28
Huế
Đoạn code dưới cũng làm giống tài liệu để test load hình :D
Cơ mà nó cứ bị lỗi IOException, ảnh mình để cùng thư mục với class luôn.
Không hiểu lí do là gì?

PHP:
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class Demo2J2ME extends MIDlet implements CommandListener {
    private Command exit;
    private ImageItem imageItem;
    private Image image;
    private Display display;
    private Form form;

    public Demo2J2ME() {
        try {
            image = Image.createImage("/loc.png");
        } catch (Exception e) {
            e.printStackTrace();
        }
        imageItem = new ImageItem("This is the IMAGE_ITEM Application", image,
                ImageItem.LAYOUT_DEFAULT, "image");
    }

    public void startApp() {
        form = new Form("ImageItem Example");
        display = Display.getDisplay(this);
        exit = new Command("Exit", Command.EXIT, 1);
        form.append(imageItem);
        form.addCommand(exit);
        form.setCommandListener(this);
        display.setCurrent(form);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }

    public void commandAction(Command c, Displayable d) {
        String label = c.getLabel();
        if (label.equals("Exit")) {
            destroyApp(true);
        }
    }
}
 

Joe

Thành viên VIP
21/1/13
2,971
1,312
113
LeLoc
your code has the biggest hidden bug. Question: what happens to imageItem if this piece of code was caught by an Exception?
PHP:
    public Demo2J2ME() {
        try {
            image = Image.createImage("/loc.png");
        } catch (Exception e) {
            e.printStackTrace();
        }
        imageItem = new ImageItem("This is the IMAGE_ITEM Application", image,
                ImageItem.LAYOUT_DEFAULT, "image");
    }
 

Joe

Thành viên VIP
21/1/13
2,971
1,312
113
LeLoc
it's not about what you have to do or what is mandatory. It about the bug which MAY cause image=null and your next instantiation imageItem will become a NULL as one of the parameters. Why it does not load the image you have to post the Exception so that people can see where was the problem ? You know, we aren't fortune-tellers who just draw some cards and tell you where is your bad luck.
 

Lê Lộc

Member
12/3/13
131
7
18
28
Huế
Joe,
Exception here:

Running with storage root C:\Users\CTY\j2mewtk\2.5.2\appdb\DefaultGrayPhone
Running with locale: Vietnamese_Vietnam.1258
Running in the identified_third_party security domain

java.io.IOException
at javax.microedition.lcdui.ImmutableImage.getImageFromStream(+15)
at javax.microedition.lcdui.ImmutableImage.<init>(+20)
at javax.microedition.lcdui.Image.createImage(+8)
at com.cty.demo2j2me.Demo2J2ME.<init>(+10)
at java.lang.Class.runCustomCode(+0)
at com.sun.midp.midlet.MIDletState.createMIDlet(+34)
at com.sun.midp.midlet.Scheduler.schedule(+52)
at com.sun.midp.main.Main.runLocalClass(+28)
at com.sun.midp.main.Main.main(+80)
 

Joe

Thành viên VIP
21/1/13
2,971
1,312
113
Joe,
Exception here:
Running with storage root C:\Users\CTY\j2mewtk\2.5.2\appdb\DefaultGrayPhone
Running with locale: Vietnamese_Vietnam.1258
Running in the identified_third_party security domain

java.io.IOException
at javax.microedition.lcdui.ImmutableImage.getImageFromStream(+15)
...
See ? It's much better. Next time: Remember that we ARE NOT fortune-tellers who just draw some cards and tell you about your bad luck.

As a SW developer you should learn by heart only one thing: Where does the exception come from? From this question you can trace backwards to the source of the exception. Also, what does the method getImageFromStream() of the API ImmutableImage say ? It says
Code:
getImageFromStream
private void getImageFromStream(InputStream istream)
                        throws IOException

    helper function called by the constructors above

    Parameters:
        istream - the name of the input stream containing image data in a supported format
    Throws:
        IOException - if there is an error with the stream
AND? Of course your loc.pgn is a piece of crap !
 

Lê Lộc

Member
12/3/13
131
7
18
28
Huế
Joe,
I understand exception come from where, but i not understand WHY?
Because above code is standard examples.
 

Joe

Thành viên VIP
21/1/13
2,971
1,312
113
No. You don't understand anything. You don't comprehend the meaning of the IOException explanation and you simply ignore my hint.
How far should I spoonfeed you ?
Are 100% sure that the file loc.png has the correct content ?
If you're sure then OK, I'll stay out of your way.
 

vtcNew

Active Member
8/10/11
252
60
28
bạn thử up project lên đây xem .Thỉnh thoảng mình cũng bị là chạy background đc , xong mang sang máy khác chạy lỗi ngay, báo là ko tìm thấy file ảnh đâu
 

Lê Lộc

Member
12/3/13
131
7
18
28
Huế
Joe,
I have done.
My error: size of loc.png can very large, it unsupported.
Thank you for taking the time and the hint for me.
 

Lê Lộc

Member
12/3/13
131
7
18
28
Huế
bạn thử up project lên đây xem .Thỉnh thoảng mình cũng bị là chạy background đc , xong mang sang máy khác chạy lỗi ngay, báo là ko tìm thấy file ảnh đâu
Mình làm được rồi, còn code ở trên đó bạn.
Có lẽ do kích thước ảnh khá lớn so với J2ME (loc.png 21kb)
Mình thay bằng cái ảnh dung lượng thấp thì okie