posted 19 years ago
I tried using this code :
import java.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.io.*;
public class HttpLogger extends MIDlet {
private Display display;
private Command exitCommand =
new Command( "Exit", Command.EXIT, 1 );
private Command okCommand =
new Command( "OK", Command.OK, 1 );
private Command cancelCommand =
new Command( "Cancel", Command.CANCEL, 1 );
private URLEntry mainForm;
public HttpLogger(){
}
protected void destroyApp( boolean unconditional )
throws MIDletStateChangeException {
exitMIDlet();
}
protected void pauseApp(){
}
protected void startApp()
throws MIDletStateChangeException {
if( display == null ){
initMIDlet();
}
}
private void initMIDlet(){
display = Display.getDisplay(this);
mainForm=new URLEntry();
display.setCurrent(mainForm);
}
public void exitMIDlet(){
notifyDestroyed();
}
void displayError( Throwable e, Displayable next ){
Alert a = new Alert( "Exception" );
a.setString( e.toString() );
a.setTimeout( Alert.FOREVER );
display.setCurrent( a, next );
}
class URLEntry extends TextBox implements CommandListener {
URLEntry()
{
super("Enter URL:","localhost:8080/jsp-examples/hello.html",100,0 );
addCommand(exitCommand );
addCommand(okCommand );
setCommandListener( this );
}
public void commandAction( Command c,
Displayable d ){
if( c == exitCommand ){
exitMIDlet();
}
else if( c == okCommand ) {
try {
HttpConnection conn =(HttpConnection)Connector.open("http://"+getString());
display.setCurrent(new Logger( this, conn ) );
}
catch( IOException e ){
displayError( e, this );
}
}
}
}
class Logger extends Form
implements Runnable, CommandListener {
private Displayable next;
private HttpConnection conn;
private StringItem text =
new StringItem( null, "" );
Logger( Displayable next,
HttpConnection conn )
{
super( "HTTP Log" );
this.next = next;
this.conn = conn;
addCommand( cancelCommand );
setCommandListener( this );
append( text );
Thread t = new Thread( this );
t.start();
}
public void commandAction( Command c,
Displayable d ){
display.setCurrent( next );
try {
conn.close();
}
catch( IOException e ){
displayError( e, next );
}
}
public void run(){
update( "Connecting to " + conn.getURL() );
try {
int rc = conn.getResponseCode();
update( "Response code: " + rc );
update( "Response message: " +
conn.getResponseMessage() );
String key;
for( int i = 0;
( key =
conn.getHeaderFieldKey( i ) )
!= null;
++i ){
update( key + ": " +
conn.getHeaderField( i ) );
}
}
catch( IOException e ){
update( "Caught exception: " +
e.toString() );
}
removeCommand( cancelCommand );
addCommand( okCommand );
}
void update( String line ){
if( display.getCurrent() != this ) return;
String old = text.getText();
StringBuffer buf = new StringBuffer();
buf.append( old );
if( old.length() > 0 ){
buf.append( '\n' );
}
buf.append( line );
text.setText( buf.toString() );
}
}
}
but still it is showing the same warning as:
Warning: To avoid potential deadock,operations that may block,such as
networking should be performed ina different thread than the
commandAction() handler.
how to solve this?
Please help...,
Saumya.