如何在J2ME中加载图像?

时间:2011-02-03 07:53:41

标签: image java-me

我正在使用TimerTask和ImageLoader类将n图像加载到图像项目。

public class Imageloader implements Runnable{

    private ImageItem item=null;
    private String url=null;

    /*
     * initializes the imageItem
     */
    public Imageloader(ImageItem item,String url){
            this.item=item;
            this.url=url;
    }


    private Image getImage(String url) throws IOException {
        item.setLabel(item.getLabel()+12);
        System.out.println("Test 5");
            HttpConnection connection = null;
            DataInputStream inp = null;
            int length;
            byte[] data;
            try {System.out.println("Test 6");
                    connection = (HttpConnection) Connector.open(url);
                    item.setLabel(item.getLabel()+13);
                    connection.getResponseMessage();
                    System.out.println("Test 7");
                    length = (int) connection.getLength();
                    item.setLabel(item.getLabel()+14);
                    System.out.println("Length is "+length);
                    System.out.println("Test 8");
                    data = new byte[length];
                    inp = new DataInputStream(connection.openInputStream());
                    item.setLabel(item.getLabel()+15);
                    System.out.println("Test 9");
                    inp.readFully(data);
                    item.setLabel(item.getLabel()+16);
                    System.out.println("Test 10");
                    return Image.createImage(data, 0, data.length);
            }
            finally {
                if (connection != null) connection.close();
                if (inp != null)inp.close();

            }
    }


    public void run() {
        System.out.println("Test 1");
        Image image=null;
        try{
                if (url!=null){
                    System.out.println("Test 2");
                        image=getImage(url);
                        System.out.println("Test 3");
                        item.setImage(image);
                        item.setLabel(item.getLabel()+17);
                        System.out.println("Test 4");
                }
                else{
                    item.setAltText("Map address specified is incorrect");
                }
        }
        catch(IOException e){
                item.setAltText("Map cannot be loaded now");
        }

    }

}

public class MapTimer extends TimerTask{

    DatagramConnection connection=null;
    String message=null;
    Imageloader imageretriever;
    ImageItem item=null;

    MapTimer (DatagramConnection connection,String message,ImageItem Img_map ){
        this.connection=connection;
        this.message=message;
        this.item=Img_map;
        item.setLabel(item.getLabel()+1);
        System.out.println("Map is initizlized...");
    }


    public void run() {
        System.out.println("Map starting...");
         item.setLabel(item.getLabel()+2);
        String serverquery=null;
        try {
             item.setLabel(item.getLabel()+3);
            sendMessage(message);
             item.setLabel(item.getLabel()+4);
            //serverquery=receiveMessage() ;
             item.setLabel(item.getLabel()+5);
            //item.setLabel(" Loading...." );
            //formatmessage(serverquery);
               String url="http://maps.google.com/maps/api/staticmap?center=Brooklyn+Bridge,New+York,NY&zoom=14&size=512x512&maptype=roadmap"+
"&markers=color:blue|label:S|40.702147,-74.015794&markers=color:green|label:G|40.711614,-74.012318"+
"&markers=color:red|color:red|label:C|40.718217,-73.998284&sensor=false";
            Imageloader Im=new Imageloader(item,url);
             item.setLabel(item.getLabel()+6);
            (new Thread(Im)).start();
             item.setLabel(item.getLabel()+7);
            System.out.println("server map query is::: "+serverquery);
        } catch (IOException ex) {
            System.out.println("Error2"+ex);
        }
          catch(Exception e){
            System.out.println("Error3"+e);
       }
    }


     /*
     * Sends a message via UDP to server
     */
    private void sendMessage(String message) throws IOException{
        Datagram packet_send=null;
        if (connection != null){
            byte[] packetsenddata=message.getBytes();
            packet_send = connection.newDatagram(packetsenddata,packetsenddata.length);
            connection.send(packet_send);
            packet_send = null;
        }
    }
}

这是我设置Timer的方法;

 MapTimer maptimer=new MapTimer (connection,mapquery ,Img_map );
                    Timer timer=new Timer();
                    timer.schedule(maptimer, 5000, 100000);

它与enulator工作正常但是当我在我的暴徒上部署时,图像没有加载.. 图像标签有点像Stopping 234567234567,这意味着我的计时器运行正常。它没有进入ImageLoader类......如何加载这个图像?

1 个答案:

答案 0 :(得分:2)

如果没有进一步的debuggind,这很难说。我建议您使用Micrologger + Web服务器,以便在设备上调试midlet。

查看您的代码,我怀疑这一行length = (int) connection.getLength();。诺基亚的IO库实现会失败吗?