J2ME Help: Potential Deadlock in commandAction() ... ?
0 posts in topic
Flat View  Flat View
TOPIC ACTIONS:
 

Posted By:   Anonymous
Posted On:   Sunday, September 28, 2003 05:01 AM

Hi there. I got this error from ktoolbar: Project "SecondTest" loaded Project settings saved Building "SecondTest"    More>>















Hi
there.



I got this error from ktoolbar:



Project "SecondTest" loaded



Project settings saved



Building "SecondTest"



Build complete



Running with storage root DefaultColorPhone



Warning: To avoid potential deadlock, operations that
may block, such as

networking, should be performed in a different thread
than the

commandAction() handler.



Below is my source codes:



RequestServlet.java

==============

import java.io.*;

import java.text.*;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;



/**

* Example servlet showing request headers

*/



public class RequestServlet extends HttpServlet {



public void doPost(HttpServletRequest request,

HttpServletResponse response)

throws IOException, ServletException {

response.setContentType("text/plain");

PrintWriter out = response.getWriter();

BufferedReader br = request.getReader();

String buf = br.readLine();

out.print("Rec: "+buf);

}

}



SecondMidletServlet.java

===================



import javax.microedition.rms.*;

import javax.microedition.lcdui.*;

import javax.microedition.midlet.*;

import javax.microedition.io.*;

import java.io.*;

import java.util.Vector;



public class SecondMidletServlet extends MIDlet
implements CommandListener {

Display display = null;

List menu = null;

TextBox input = null;

String user = null;



String url =
"http://developer.java.sun.com/servlet/RequestServlet";

static final Command backCommand = new Command("Back",
Command.BACK, 0);

static final Command submitCommand = new
Command("Submit", Command.OK, 2);

static final Command exitCommand = new Command("Exit",
Command.STOP, 3);

String currentMenu = null;



public SecondMidletServlet() {

}



public void startApp() throws MIDletStateChangeException
{

display = Display.getDisplay(this);

menu = new List("Invoke Servlet", Choice.IMPLICIT);

menu.append("Add a user", null);

menu.addCommand(exitCommand);

menu.setCommandListener(this);

mainMenu();

}



public void pauseApp() {

}



public void destroyApp(boolean unconditional) {

notifyDestroyed();

}



void mainMenu() {

display.setCurrent(menu);

}



public void addName() {

input = new TextBox("Enter first name:", "", 5,
TextField.ANY);

input.addCommand(submitCommand);

input.addCommand(backCommand);

input.setCommandListener(this);

input.setString("");

display.setCurrent(input);

}



void invokeServlet(String url) throws IOException {

HttpConnection c = null;

InputStream is = null;

OutputStream os = null;

StringBuffer b = new StringBuffer();

TextBox t = null;

try {

c = (HttpConnection)Connector.open(url);

c.setRequestMethod(HttpConnection.POST);

c.setRequestProperty("IF-Modified-Since", "20 Jan 2001
16:19:14 GMT");

c.setRequestProperty("User-Agent","Profile/MIDP-1.0
Configuration/CLDC-1.0");

c.setRequestProperty("Content-Language", "en-CA");



os = c.openOutputStream();

String str = "name="+user;

byte postmsg[] = str.getBytes();

System.out.println("Length: "+str.getBytes());

for(int i=0;i

os.write(postmsg[i]);

}

// or you can easily do:

// os.write(("name="+user).getBytes());

os.flush();



is = c.openDataInputStream();

int ch;

while ((ch = is.read()) != -1) {

b.append((char) ch);

System.out.print((char)ch);

}

t = new TextBox("Second Servlet", b.toString(), 1024,
0);

t.addCommand(backCommand);

t.setCommandListener(this);

} finally {

if(is!= null) {

is.close();

}

if(os != null) {

os.close();

}

if(c != null) {

c.close();

}

}

display.setCurrent(t);

}



public void commandAction(Command c, Displayable d) {

String label = c.getLabel();

if (label.equals("Exit")) {

destroyApp(true);

} else if (label.equals("Back")) {

mainMenu();

} else if (label.equals("Submit")) {

user = input.getString();

try {

invokeServlet(url);

}catch(IOException e) {}

} else {

addName();

}

}

}



Any idea how to solve this? I am a newbie and that
source code is extracted from a tutorial in java sun.



Please!



Thanks.



Regards,

Chua Wen Ching :p



   <<Less
About | Sitemap | Contact