2011-02-03 67 views
0

我正在使用TimerTask和ImageLoader類將n圖像加載到圖像項目。如何在J2ME中加載圖像?

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."+ 
"&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; 
     } 
    } 
} 

這是我如何設置計時器;

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

它的正常工作與enulator但我對我的暴徒部署,圖像不中.. 圖像標籤是有點像Stopping 234567234567這意味着我的定時器運行良好。它沒有進入ImageLoader類...如何加載這個圖像?

回答

2

這很難說沒有進一步調試。我建議您使用Micrologger + Web服務器,以便在設備上調試您的MIDlet。

尋找你的代碼,我懷疑這條線length = (int) connection.getLength();。諾基亞的IO庫實施可能會失敗嗎?