Bom dia a todos. Tenho um conjunto de classes e servlets que manipulam o bancos de dados em um projeto, até ai ocorre tudo bem. No outro projeto possuo a aplicação cliente com conexão http aos servlets.
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Displayable;
public class Conexao extends Thread
{
HttpConnection http=null;
DataOutputStream os=null;
DataInputStream is=null;
String url;
public Conexao()
{
}
public HttpConnection run(String url)
{
this.url=url;
System.out.println(url);
//Cria conexão http na url informada
try
{
http = (HttpConnection) Connector.open(url);
http.setRequestMethod(HttpConnection.POST);//envia método do pedido : POST ou GET
http.setRequestProperty("User-Agent","Profile/MIDP-1.0, Configuration/CLDC-1.0");//Informação de cabeçalho a ser enviado
http.setRequestProperty("Content-Language","en-US");
}
catch (IOException ex)
{
ex.printStackTrace();
}
return http;
}
public DataOutputStream Output() throws IOException
{
os =(DataOutputStream)http.openDataOutputStream();
return os;
}
public DataInputStream Intput() throws IOException
{
is =(DataInputStream)http.openDataInputStream();
return is;
}
}
Aqui o midlet implementado
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Alert;
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.TextField;
import javax.microedition.lcdui.Ticker;
import javax.microedition.midlet.MIDlet;
public class Inicio extends MIDlet implements CommandListener
{
public Display display;
public Form frmLogin;
public TextField tf_login,tf_senha;
public Command cm_entrar, cm_sair,cm_pesquisar;
public Ticker ticker;
private Alert alError;
String url = "http://localhost:8084/MlearningServ/Servlet";// url na qual o cel se conectará
HttpConnection http=null;
DataOutputStream os=null;
DataInputStream is=null;
Conexao conn = new Conexao();
public void startApp()
{
http=conn.run(url);
display=Display.getDisplay(this);
frmLogin= new Form("Cadastro");
frmLogin=new Form("M-Learning");
tf_login=new TextField("Usuário:","",10,TextField.ANY);
tf_senha=new TextField("Senha:","",10,TextField.ANY);
ticker=new Ticker("Bem Vindo");
cm_sair=new Command("Sair",Command.BACK,1);
cm_entrar=new Command("Cadastrar",Command.ITEM,1);
cm_pesquisar= new Command("Pesquisar",Command.ITEM,2);
frmLogin.append(tf_login);
frmLogin.append(tf_senha);
frmLogin.addCommand(cm_sair);
frmLogin.addCommand(cm_entrar);
frmLogin.addCommand(cm_pesquisar);
frmLogin.setCommandListener(this);
display.setCurrent(frmLogin);
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
public void commandAction(Command c, Displayable d)
{
if(c==cm_entrar)
{
try
{
Gravar(http);
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
else if(c==cm_pesquisar)
{
try
{
Pesquisar(http);
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
else if(c==cm_sair)
{
destroyApp(true);
notifyDestroyed();
}
}
public void Gravar(HttpConnection http) throws IOException
{
os=conn.Output();//Declaração do objeto que permite enviar dados
os.writeUTF("Gravar");
os.writeUTF(tf_login.getString().trim());//grava os valores para serem enviados ao servidor
os.writeUTF(tf_senha.getString().trim());
os.close();
if(http.getResponseCode()== HttpConnection.HTTP_OK)
{
showAlert(http.getResponseMessage());
}
else
showAlert(http.getResponseMessage());
}
public void Pesquisar(HttpConnection http) throws IOException
{
//envio para pesquisa
os=conn.Output();
os.writeUTF("Pesquisar");
os.writeUTF(tf_login.getString());
os.close();
is=conn.Intput();
//Resposta do servidor
tf_login.setString(is.readUTF());
tf_senha.setString(is.readUTF());
is.close();
}
public void showAlert(String err)
{
Alert a = new Alert("");
a.setString(err);
a.setTimeout(Alert.FOREVER);
display.setCurrent(a);
}
}
O problema é o seguinte, quando abro e fecho os stream ocorre tudo bem, porém se quero utilizá-los novamente(cadastrei algo e agora vou pesquisar) ele emite o erro:
java.io.IOException: no more output streams available
Sou novato, como trato os streams para abrí-los e fechá-los quando eu quiser ?
até mais !!!