This week's book giveaway is in the Other Languages forum.
We're giving away four copies of Functional Reactive Programming and have Stephen Blackheath and Anthony Jones on-line!
See this thread for details.
Win a copy of Functional Reactive Programming this week in the Other Languages forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

How to invoke the MIDlet ?

 
Soumya Mathai
Greenhorn
Posts: 6
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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 i'm getting the 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.
 
Mark Spritzler
ranger
Sheriff
Posts: 17278
6
IntelliJ IDE Mac Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Well, I can't read your code because there is no formatting or indentation. I tried to edit your post, expecting to see indentation and just add the [/CODE] tags around it, but there was no indentation.

But you are just receiving a warning and not an error, you can still run your application. It is just saying that you are going to use COmmunication somewhere where the program will hang and wait until it gets a response, in some cases that is fine.

If you wanted to run the Communication in a seperate thread, therefore not block your app, then you won't see the warning again, but you can disregard the warning too.

Mark
 
Eduardo Marques
Ranch Hand
Posts: 231
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
[duplicate posting]
[ January 05, 2006: Message edited by: Eduardo Marques ]
 
Eduardo Marques
Ranch Hand
Posts: 231
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
You are closing the connection (c.close()) in commandAction(), this is the reason for the warning. Note this is just a warning, but preferably you should do c.close() in another thread (not the system thread that invokes commandAction()).

You will not receive other UI events until commandAction() returns ie in your code until c.close() returns. c.close() is a networking operation and may be a time-consuming operation ...
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic