Acesso http e segurança

Boa tarde a todos, executei um midlet no emulador pra acesso http, funcionou perfeitamente, mas quando coloco a aplicação no celular, ela tenta acessar o GPRS, mas não retorna a imagem nem nada, parece que nem acessa http porque os créditos não são gastos, li algo a respeito da segurança do j2me, e assinatura digital para midlets confiáveis. Mesmo eu permitindo a execução da aplicação no cel, não tenho retorno algum, alguém já passou por isso?


package com.abstractj;

import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.IOException;

import javax.microedition.io.Connector;
import javax.microedition.io.ContentConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.ImageItem;
import javax.microedition.lcdui.TextBox;
import javax.microedition.midlet.MIDlet;

/*--------------------------------------------------
 * ViewPng.java
 *
 * Download and view a png file
 *
 * Example from the book:     Core J2ME Technology
 * Copyright John W. Muchow   http://www.CoreJ2ME.com
 * You may use/modify for any non-commercial purpose
 *-------------------------------------------------*/


public class ViewPng extends MIDlet implements CommandListener
{
	private Display display;
	private TextBox tbMain;
	private Form fmViewPng;
	private Command cmExit;
	private Command cmView;
	private Command cmBack;

	public ViewPng()
	{
		display = Display.getDisplay(this);

		// Create the Main textbox with a maximum of 75 characters
		tbMain = new TextBox("Enter url", "http://www.s3.com.br/teste/duke.png", 75, 0);

		// Create commands and add to textbox
		cmExit = new Command("Exit", Command.EXIT, 1);
		cmView = new Command("View", Command.SCREEN, 2);    
		tbMain.addCommand(cmExit);
		tbMain.addCommand(cmView );    

		// Set up a listener for textbox
		tbMain.setCommandListener(this);

		// Create the form that will hold the png image
		fmViewPng = new Form("");

		// Create commands and add to form
		cmBack = new Command("Back", Command.BACK, 1);
		fmViewPng.addCommand(cmBack);

		// Set up a listener for form
		fmViewPng.setCommandListener(this);
	}

	public void startApp()
	{
		display.setCurrent(tbMain);
	}

	public void pauseApp()
	{ }

	public void destroyApp(boolean unconditional)
	{ }

	/*--------------------------------------------------
	 * Process events
	 *-------------------------------------------------*/
	public void commandAction(Command c, Displayable s)
	{
		// If the Command button pressed was "Exit"
		if (c == cmExit)
		{
			destroyApp(false);
			notifyDestroyed();
		}
		else if (c == cmView)
		{


			Runnable runnable = new Runnable() {

				public void run() {
					// Download image and place on the form
					try
					{
						Image im;
						if ((im = getImage(tbMain.getString())) != null)
						{
							ImageItem ii = new ImageItem(null, im, ImageItem.LAYOUT_DEFAULT, null);

							// If there is already an image, set (replace) it
							if (fmViewPng.size() != 0) {
								fmViewPng.set(0, ii);
							}
							else {  // Append the image to the empty form
								fmViewPng.append(ii);
							}
						}
						else {
							fmViewPng.append("Unsuccessful download.");
						}

						// Display the form with the image
						display.setCurrent(fmViewPng);
					}
					catch (Exception e)
					{ 
						System.err.println("Msg: " + e.toString());
					}
				} 

			};
			Thread thread = new Thread(runnable);
			thread.start();

		} else if (c == cmBack) {
			display.setCurrent(tbMain);
		}
	}

	/*--------------------------------------------------
	 * Open connection and download png into a byte array.
	 *-------------------------------------------------*/
	private Image getImage(String url) throws IOException
	{
		ContentConnection connection = (ContentConnection) Connector.open(url);

		// * There is a bug in MIDP 1.0.3 in which read() sometimes returns
		//   an invalid length. To work around this, I have changed the 
		//   stream to DataInputStream and called readFully() instead of read()
//		InputStream iStrm = connection.openInputStream();
		DataInputStream iStrm = connection.openDataInputStream();    

		ByteArrayOutputStream bStrm = null;    
		Image im = null;

		try
		{
			// ContentConnection includes a length method
			byte imageData[];
			int length = (int) connection.getLength();
			if (length != -1)
			{
				imageData = new byte[length];

				// Read the png into an array
//				iStrm.read(imageData);        
				iStrm.readFully(imageData);
			}
			else  // Length not available...
			{       
				bStrm = new ByteArrayOutputStream();

				int ch;
				while ((ch = iStrm.read()) != -1)
					bStrm.write(ch);

				imageData = bStrm.toByteArray();
				bStrm.close();                
			}

			// Create the image from the byte array
			im = Image.createImage(imageData, 0, imageData.length);        
		}
		finally
		{
			// Clean up
			if (iStrm != null)
				iStrm.close();
			if (connection != null)
				connection.close();
			if (bStrm != null)
				bStrm.close();                              
		}
		return (im == null ? null : im);
	}
}